Проверьте для конкретного соглашения об именах - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть каталог, в котором пользователи сохраняют свои файлы Excel, которые должны соответствовать определенному соглашению об именах:

XX-TestFile.xlsx

, где XX - это переменная цифра, а -TestFile.xlsx всегда должно быть одинаковым ине изменить.Я хотел бы иметь возможность проверить пакетное задание, если файлы в каталоге соответствуют определенному соглашению об именах.

Если имя файла написано с ошибкой, то есть XX-TetsFiel.xlsx, XX не является цифрой, подобной 02 или даже XX-testfile.xlsx (все строчные буквы), затем файлы должны быть перемещены в каталог ошибок.

Я использую ниже для перемещения файлов для достижения этой цели.Я тестирую с 11-testFiel.xlsx, и он работает просто отлично.

@echo off

for /f "delims=" %%a in ('dir /b *.xlsx ^| findstr /v "[0-9][0-9]-TestFile.xlsx"') do move "%%a" "C:\Temp\Archive\Error"

Однако, dir /b *.xlsx | findstr /v "[0-9][0-9]-TestFile.xlsx" допускает 109 возможных комбинаций, поскольку XX - это переменная с двумя цифрами, например 02.Тем не менее, теперь я хотел бы проверить только определенные имена файлов из 20 возможных цифр, таких как 02-TestFile.xlsx, 05-TestFile.xlsx, 10-TestFile.xlsx и т. Д. Этот список является фиксированным ... Так, например, если файл называется 99-TestFile.xlsxЯ все еще хотел бы переместить его в архив ошибок, так как это нежелательное имя файла.Можете ли вы предложить решение для этого?

1 Ответ

3 голосов
/ 01 апреля 2019

Поместите действительные имена в текстовый файл (например, «ValidNames.txt») и используйте findstr с параметром / G.

02-TestFile.xlsx
05-TestFile.xlsx
10-TestFile.xlsx
...

@echo off

for /f "delims=" %%a in ('
    dir /b *.xlsx ^| findstr /vxlg:"ValidNames.txt"
') do move "%%a" "C:\Temp\Archive\Error"
...