Для / F findstr установить значение второго столбца CSV - PullRequest
0 голосов
/ 16 февраля 2019

Я использую код для удаления всех файлов в папке, которые содержат некоторые слова, сохраненные в файле CSV.

Этот код читает каждую строку моего файла CSV, а после поиска каждое слово читается в CSV и удаляетсяфайлы, которые есть в нашем источнике, имеют это слово.

Теперь мне нужно адаптировать этот код, чтобы использовать аналогичное значение во втором столбце моего CSV.

Мой list.csv файл:

1,DRWORDAAA
2,ERWORDBBB
3,BCWORDCCC
99,ASWORDZZZ

Мой пакетный файл:

for /F "delims=" %%a in ('findstr /M /G:"D:\Program Files\list.csv" "D:\Program Files\myfolder\*.log"') do del "%%a"

Мне нужно установить одинаковые значения для поиска в 2 столбцах моего CSV (в моем примере от DRWORDAAA до ASWORDZZZ).

У моего CSV есть сотни строк, и слова для поиска могут отличаться, но структура всегда одинакова.

На самом деле, код пакетного файла читает только первый столбец CSV и не распознает секунды.колонка.

1 Ответ

0 голосов
/ 16 февраля 2019

Пока я пытался ответить на ваш вопрос, я также использовал информацию из моего последнего ответа вам, , поскольку это, по-видимому, фактически та же самая задача .

ФайлСтроки поиска не должны быть ничем иным, как списком, то есть одним столбцом строк поиска, где каждая полная строка составляет строку для сопоставления.Поэтому самое простое исправление заключается в том, что вы переписываете файл 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.
...