2015-05-20 1 views
0

Надеюсь, вы могли мне помочь. Мне нужно написать небольшой пакетный файл, который может сидеть на ПК пользователя (а не исключительно грамотном компьютере), чтобы проверить папку (которая используется совместно с сервером) и перечислить файлы в этой папке, которые не соответствуют шаблону файла. У меня есть приложение, которое работает каждую ночь, но файлы должны быть названы *_*_*.* Приложение терпит неудачу, если оно не в этом формате, и даже при том, что приложение сообщит о некотором значении того, какой файл был неправильным, они теряют день, и если они снова сделайте это неправильно ... еще один день. Они должны иметь возможность запускать этот простой командный файл, и он может только на экране отображать неправильно названные файлы.Пакетный файл в Windows 7, чтобы найти файлы, не соответствующие шаблону

Я начал читать о функции forFiles, но не смог понять, как правильно ее использовать. Кроме того, смогу ли я напрямую ссылаться на эту общую папку? Теперь, если мы получим доступ к нему, это выглядит примерно так: \ dhpServer1 \ PeopleFolder. Здесь находятся файлы, которые необходимо проверить.

Высокой оценки

ответ

1

Вы можете создать полный список файлов и отфильтровать тех, не соответствует требуемой схеме.

dir /b /a-d "\\dhpServer1\PeopleFolder\*" | findstr /v /r /c:"^[^_][^_]*_[^_][^_]*_.*" 

findstr фильтрует вывод команды dir, показывая строки, которые не соответствуют (/v) регулярному expresion (/r), указанному (/c:):

^  at the start of the line 
[^_] a non underscore character 
[^_]* followed by zero or more non underscore characters 
_  followed by an underscore 
[^_] followed by a non underscore character 
[^_]* followed by zero or more non underscore characters 
_  followed by an underscore 
.* followed by any sequence of zero or more characters 

Вероятно потребность выражения для корректировки. Это выражение равно моей интерпретации (и, конечно, я могу ошибаться) того, что вы написали как *_*_*.*, но не соответствует поведению шаблона в команде dir. "^[^_]*_[^_]*_.*" ближе к поведению указанного выражения подстановки.

+0

Большое спасибо. Делает чудеса! – user990855

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir\t w o" 
SET "errorfound=" 
FOR /f "delims=" %%a IN (
    'dir /b /a-d "%sourcedir%\*" ' 
) DO (
SET "error=" 
FOR /f "tokens=1-3*delims=_" %%p IN ("q%%a") DO (
    IF "%%p" equ "q" SET error=Y 
    IF "%%s" neq "" SET error=Y 
    IF "%%r" equ "" SET error=Y 
    IF NOT DEFINED error (
    FOR /f "tokens=1,2*delims=." %%x IN ("q%%r") DO (
    IF "%%x" equ "q" SET error=Y 
    IF "%%y" equ "" SET error=Y 
    IF "%%z" neq "" SET error=Y 
    ) 
) 
    IF DEFINED error (
    ECHO %%a is invalid FORMAT 
    SET errorfound=y 
) ELSE (ECHO %%a is OK) 
) 
) 
IF DEFINED errorfound (
ECHO error found 
PAUSE 
) ELSE (
ECHO All OK! 
timeout /t 5 >nul 
) 
GOTO :EOF 

Вы должны были бы изменить установку sourcedir в соответствии с вашими обстоятельствами.

Вот пример вывода:

a_valid_file.name is OK 
_invalid_file.namestartingunderscore is invalid FORMAT 
an_invalid_file_name.toomanyundescores is invalid FORMAT 
invalid_file.nameinsufficientunderscores is invalid FORMAT 
an_invalid_.filenameterminalunderscoreinname is invalid FORMAT 
an_extra_invalid_.filenameterminalunderscoreinname is invalid FORMAT 
an_invalid_filenamewithnoextension is invalid FORMAT 
an_invalid_filenamewith.multiple.extensions is invalid FORMAT 
error found 
Press any key to continue . . . 

Если все файлы находятся в допустимом формате, то процедура должна показать apprpriate сообщение в течение 5 секунд и прекращается.

Принцип заключается в том, чтобы оценить отдельные части имени по tokenising, когда _ и . используются в качестве сепараторов и эксплуатаций if defined характеристики для переключения ли произошла ошибка на основе экземпляра по-экземпляр.

Смежные вопросы