Пока я пытался ответить на ваш вопрос, я также использовал информацию из моего последнего ответа вам, , поскольку это, по-видимому, фактически та же самая задача .
ФайлСтроки поиска не должны быть ничем иным, как списком, то есть одним столбцом строк поиска, где каждая полная строка составляет строку для сопоставления.Поэтому самое простое исправление заключается в том, что вы переписываете файл csv, чтобы включить в него только один «столбец».
@Echo Off
If Not Exist "D:\Program Files\MyFolder\*.log" Exit /B
Set "ds="
For /F "Tokens=1-3 Delims=/ " %%A In ('RoboCopy /NJH /L "\|" Null'
) Do If Not Defined ds Set "ds=list_%%C-%%B-%%A.csv"
If Not Exist "%ds%" Exit /B
( For /F "EOL=, Tokens=2 Delims=," %%A In ('Type "%ds%"'
) Do Echo(%%A)>"%Temp%\list.txt"
For /F "Tokens=*" %%A In ('FindStr /IMLG:"%Temp%\list.txt"^
"D:\Program Files\MyFolder\*.log"') Do Del /A /F "%%A">Nul 2>&1
Del "%Temp%\list.txt"
При этом используется тот же метод, но без создания, чтения и удаления файла хранения.Я не рекомендовал бы этот метод для очень больших файлов CSV.
@Echo Off
If Not Exist "D:\Program Files\MyFolder\*.log" Exit /B
Set "ds="
For /F "Tokens=1-3Delims=/ " %%A In ('RoboCopy /NJH /L "\|" Null'
) Do If Not Defined ds Set "ds=list_%%C-%%B-%%A.csv"
If Not Exist "%ds%" Exit /B
For /F "EOL=, Skip=1 Tokens=2 Delims=," %%A In ('Type "%ds%"'
) Do For /F "Tokens=*" %%B In ('FindStr /IMLC:"%%A" "*.log"'
) Do Del /A /F "%%B">Nul 2>&1
Примечания:
- Это не проверено.
- Метод, используемый для анализа csv, означает, что его следует использовать только в том случае, если заполнены как первое, так и второе поля.
- В первом примере выше предполагается, что файл csv не имеетзаголовок, тогда как второй пример ожидает заголовок и
Skip
его. (Просто удалите или добавьте Skip=1
к тому методу, который вы выберете, если необходимо.) - В приведенных выше примерах используется
Type
, что может помочьЕсли ваш источник CSV будет UTF.