Эта фильтрация задач может быть достигнуто, например, с следующей код партии:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
del "Sfv_Replace.log" 2>nul
for /F "delims=" %%I in ('%SystemRoot%\System32\findstr.exe /V "OK" "sfv.log" 2^>nul') do (
set "LogLine=%%I"
set "FileNameWithPath=!LogLine:*CD=CD!"
for %%J in ("!FileNameWithPath!") do set "FilePath=!FileNameWithPath:\%%~nxJ=!
set "VariableName=Folder#!FilePath:\=_!
if not defined !VariableName! (
echo !LogLine!>>"Sfv_Replace.log"
set "!VariableName!=1"
)
)
endlocal
Файл журнала Sfv_Replace.log
удаляется первым, если все еще существует с предыдущего запуска на всех.
Следующих консольное приложение FINDSTR выполняются на файл sfv.log
, который выводит все строки не содержащих строку OK
регистрозависимой в любом месте строки.
Эти линии обрабатываются внешним За цикл, который сначала назначает всю текущую строку переменной окружения LogLine
.
Все, что осталось от CD
... начало каждого пути к каталогу ... удаляется из строки из файла журнала, чтобы получить только имя файла с относительным путем, назначенным переменной окружения FileNameWithPath
, используя отложенное расширение, если требуется, когда среда переменная определена/изменена в командном блоке, начиная с (
и заканчивая совпадением )
, и значение которого указано в том же командном блоке.
Все значения FileNameWithPath
на запуск пакетного файла на примере линий:
CD8542\EN\contents\cnt\FSE14_15_07.swf
CD8542\EN\contents\cnt\FSE19_05_01.flv
CD8542\EN\contents\cnt\FSE19_05_02.flv
CD8542\EN\contents\cnt\FSE19_06_01.flv
CD8542\EN\contents\cnt\FSE19_06_05.flv
CD8542\EN\contents\cnt\FSE19_06_06.flv
CD8542\EN\contents\cnt\FSE19_08_02.flv
CD8542\EN\contents\cnt\FSE19_08_03.flv
CD8539\Course01\Lesson01\Exi_04\snd\NO.18.mp3
CD8539\Course01\Lesson01\Exi_04\snd\NO.180.mp3
CD8539\Course01\Lesson01\Exi_04\snd\NO.181.mp3
CD8539\Course01\Lesson01\Exi_04\snd\NO.182.mp3
CD8539\Course01\Lesson01\Exi_04\snd\NO.183.mp3
CD8539\Course01\Lesson01\Exi_04\snd\NO.184.mp3
CD0165\Course01\Lesson01\alcap_4\5\q3.xml
CD0165\Course01\Lesson01\alcap_4\5\q4.xml
CD0165\Course01\Lesson01\alcap_4\5\q5.xml
CD0165\Course01\Lesson01\alcap_4\5\q6.xml
CD0165\Course01\Lesson01\alcap_4\5\q7.xml
CD0165\Course01\Lesson01\alcap_4\5\q8.xml
Внутренний ДЛЯ цикл используется для получения от имени файла с относительным путем только имя файла и расширение файла которые затем удаляются из имени файла с путём, чтобы получить только относительный путь каталога, хранящийся в переменной окружения FilePath
.
Все значения FilePath
на запуск пакетного файла на примере линий:
CD8542\EN\contents\cnt
CD8542\EN\contents\cnt
CD8542\EN\contents\cnt
CD8542\EN\contents\cnt
CD8542\EN\contents\cnt
CD8542\EN\contents\cnt
CD8542\EN\contents\cnt
CD8542\EN\contents\cnt
CD8539\Course01\Lesson01\Exi_04\snd
CD8539\Course01\Lesson01\Exi_04\snd
CD8539\Course01\Lesson01\Exi_04\snd
CD8539\Course01\Lesson01\Exi_04\snd
CD8539\Course01\Lesson01\Exi_04\snd
CD8539\Course01\Lesson01\Exi_04\snd
CD0165\Course01\Lesson01\alcap_4\5
CD0165\Course01\Lesson01\alcap_4\5
CD0165\Course01\Lesson01\alcap_4\5
CD0165\Course01\Lesson01\alcap_4\5
CD0165\Course01\Lesson01\alcap_4\5
CD0165\Course01\Lesson01\alcap_4\5
Все слеша относительного пути к каталогу заменяются подчеркиванием и Folder#
вставляется в начале, чтобы создать переменную окружения.
Все значения VariableName
на запуск пакетного файла на примере линий:
Folder#CD8542_EN_contents_cnt
Folder#CD8542_EN_contents_cnt
Folder#CD8542_EN_contents_cnt
Folder#CD8542_EN_contents_cnt
Folder#CD8542_EN_contents_cnt
Folder#CD8542_EN_contents_cnt
Folder#CD8542_EN_contents_cnt
Folder#CD8542_EN_contents_cnt
Folder#CD8539_Course01_Lesson01_Exi_04_snd
Folder#CD8539_Course01_Lesson01_Exi_04_snd
Folder#CD8539_Course01_Lesson01_Exi_04_snd
Folder#CD8539_Course01_Lesson01_Exi_04_snd
Folder#CD8539_Course01_Lesson01_Exi_04_snd
Folder#CD8539_Course01_Lesson01_Exi_04_snd
Folder#CD0165_Course01_Lesson01_alcap_4_5
Folder#CD0165_Course01_Lesson01_alcap_4_5
Folder#CD0165_Course01_Lesson01_alcap_4_5
Folder#CD0165_Course01_Lesson01_alcap_4_5
Folder#CD0165_Course01_Lesson01_alcap_4_5
Folder#CD0165_Course01_Lesson01_alcap_4_5
Последний проверяется для переменной текущей среды имени, если существует переменная окружения с таким именем уже определена. Строка из файла журнала игнорируется, если это так. В противном случае строка из файла журнала выводится с переадресацией в файл журнала Sfv_Replace.log
, на который она добавляется, и переменная среды определена со значением 1
.
Итак, наконец, файл Sfv_Replace.log
содержит только иллюстративную линию:
NOT FOUND ***** CD8542\EN\contents\cnt\FSE14_15_07.swf
NOT FOUND ***** CD8539\Course01\Lesson01\Exi_04\snd\NO.18.mp3
FAILED CRC32 CD0165\Course01\Lesson01\alcap_4\5\q3.xml
Для понимания используемых команд и как они работают, открыть окно командной строки, выполните там следующие команды, и читать полностью всю помощь страницы, отображаемые для каждой команды очень тщательно.
del /?
echo /?
endlocal /?
for /?
if /?
set /?
setlocal /?
См. Также статью Microsoft Using command redirection operators.
На 2^>nul
угле кронштейн >
маскируется каретка характера ^
быть интерпретирован разбором FOR командной строки как буквенный символ, а затем на выполнении Findstr как оператор перенаправления для перенаправления вывода сообщения об ошибке на Findstr для обработки STDERR к устройству NUL для подавления его в случае отсутствия sfv.log
при исполнении командного файла.
Если у вас есть машина linux, сидящая вокруг, тогда вы можете «cat/path/to/file» rev | cut -d \/-f2- | rev | sort -u' (не отличный ответ, но ...) – varlogtim
Это на сервере Windows 2008 R2. – Norlig