Я пытаюсь найти файлы, которые не соответствуют (в начале имени файла) предопределенным форматам, содержащимся в файле .txt.
У меня есть следующее:
@Echo off
chcp 1254>nul
setlocal DisableDelayedExpansion
for /f "usebackq tokens=1,2,3* delims=~" %%f in ("%USERPROFILE%\Desktop\xref.txt") do (
set "DIRNAME=%%f"
set "DIRNAM2=^%%f"
set "PATHNAM=%%h"
set "ALBUMNM=%%g"
SETLOCAL EnableDelayedExpansion
IF EXIST !PATHNAM!!DIRNAME! (
PushD !PATHNAM!!DIRNAME!
dir /b /a-d "*" | findstr /v /r /c:"!DIRNAM2! -*"
)
ENDLOCAL
)
pause
EXIT /b
Это прекрасно работает, за исключением имен файлов, содержащих челки (восклицательные знаки).
Вот пример моего файла .txt (подкаталог ~ имя альбома ~ путь), который генерируется скриптом:
12 Byzantine Rulers. The History of The Byzantine Empire~12 Byzantine Rulers. The History of The Byzantine Empire~g:\test\
17th Century Poetry~17th Century Poetry~g:\test\
1984 (George Orwell)~1984 (George Orwell)~g:\test\
1_2_1~1_2_1~g:\test\
21st Century American Foreign Policy~21st Century American Foreign Policy~g:\test\
99% Invisible~99% Invisible~g:\test\
Communication Matters. That’s Not What I Meant!~Communication Matters. That’s Not What I Meant!~g:\test\
Существуют сотни каталогов, содержащих сотни файлов (подкастов). Я хотел бы исправить эту партию, чтобы она также могла обрабатывать удары (!).
Заранее спасибо.
Редактировать. Мои тестовые данные не были достаточно надежными. Команда findstr также не работает (по крайней мере) со следующими символами: é '»¿... то есть PushD возвращает меня в правильный каталог, но FindStr не выполняет его выборку, как ожидалось.