Проверьте, доступен ли файл с шаблоном в каталоге, используя пакетный скрипт - PullRequest
0 голосов
/ 24 июня 2018

Файл удаляется в каталоге, когда другое задание завершает его обработку.Требуется запустить пакетный скрипт, чтобы проверить, доступен ли файл на сегодня .и если доступно, мне нужно выполнить определенный пакетный скрипт.(Пример: файл с шаблоном именования ABC-D * .txt должен быть доступен с датой изменения = сегодня )

То, что я до сих пор выяснил, это:

FOR /F "tokens=1,2,3* Delims=/ " %%I in ('DATE /T') DO set TODAY=%%I-%%J-%%K
xcopy C:\BatchJobs\Odd*.* /L /D:%TODAY%

Выполнение этого дает вывод:

C:\BatchJobs\OddEven.txt
File cannot be copied onto itself
0 File(s)

C:\BatchJobs\OddEven.txt, отображение в консоли - это то, что мне нужно.Но мне нужно сохранить его в каком-то файле или в некоторой переменной, чтобы иметь возможность использовать этот путь позже в моем пакетном скрипте.Может кто-нибудь помочь мне сохранить этот путь к файлу в переменной или файле?Или предложить другие способы достижения этой цели?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы можете использовать forfiles, который способен фильтровать файлы по дате их последнего изменения, но не по времени:

forfiles /P "D:\ROOT" /M "ABC-D*.txt" /D +0 /C "cmd /C echo @file"

Вместо echo вы можете указать свой пакетный скрипт для выполнения.

0 голосов
/ 24 июня 2018

Этот код идентифицирует файлы "ABC-D * .txt", написанные в последний раз сегодня.Поместите приведенный ниже код в файл, например doit.ps1 (но выберите лучшее имя).Я сделал команду attrib для файла, но вы захотите сделать что-то еще.

$srcdir = 'C:\src\t\empty'

Get-ChildItem -File -Path $srcdir -Filter 'ABC-D*.txt' |
    Where-Object { $_.LastWriteTime -ge [datetime]::Today } |
    ForEach-Object {
        # Do something to the $_ file
        & attrib $_
    }

Затем вы можете запустить его из оболочки cmd с помощью:

powershell -NoProfile -File doit.ps1
...