подстановочный знак в операторе if в пакетном файле - PullRequest
0 голосов
/ 14 февраля 2019

Я использую bactchfile для Windows, чтобы получить все папки, которые не начинаются с «abc».Поэтому игнорирование имен папок abcd, abc123 и т. Д. Кажется, оператор IF не обрабатывает подстановочные знаки.Как я могу это сделать.

for /D %%A in (*) do ( 
    if not %%A == abc* (Do commands)
)

Я нашел некоторую справку о том, чтобы использовать что-то вроде следующего, но не могу получить правильный синтаксис.

%variable:~offset,length%

Я попробовал этот синтаксисно это не правильно:

if not %%A:~0:3 == abc (Do commands)

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019
for /f "eol=: delims=" %%F in ('dir /b * ^| findstr /vbi abc') do (
  REM your commands processing file %%F here
)

eol=:, вероятно, не является необходимым.Я включил его, потому что вы не хотите исключать любые файлы, начинающиеся с символа EOL, который по умолчанию равен ;, и имя файла может начинаться с ;.Ни один файл не может начинаться с :, так что это безопасно для EOL.

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

Если вы используете простой цикл FOR, то возможно, что переименованный файл будет обработан дважды (или больше!), потому что FOR может начать обработку файлов, прежде чем он завершит обнаружение.их.Новое имя переименованного файла может появиться позже в списке и подвергнуться повторной обработке.

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

просто чтобы дать альтернативу без использования временной переменной (и, следовательно, нет необходимости в отложенное расширение ):

for %%a in (*) do (
   echo %%a|findstr /ib "abc" || (
     echo Do commands with '%%a'
   )
)

findstr /ib ищет строки, которые начинаются (b) с определенной подстрокой (abc), игнорирование заглавных букв (i)
|| работает как «если предыдущая команда (findstr) завершилась неудачей, то»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...