1

Я хочу найти папку, имя которой начинается с поля. FOR позволяет мне использовать подстановочные знаки:

for /D %%f in ("fld-*") do set FOLDER=%%f

Однако со следующими папками:

.fld-blah\
fld-blahblah\
afld-blah\

он также (несколько неожиданно) находит тот, который начинается, " . "

Я решил протестировать первый символ с помощью оператора DOS LEFT . Похоже, это не работает для переменных FOR (здесь %%F ), поэтому мне нужно сначала назначить его нормальной переменной. Запустите следующий файл .bat дважды (вы поймете почему):

@echo off 
for /D %%f in ("fld-*") do (
set TEST=%%f
echo f:         %%f
echo TEST:      %TEST%
echo TEST[0,1]: %TEST:~0,1%
echo.
)

производит следующий вывод:

C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah
TEST:
TEST[0,1]: ~0,1

f:         .fld-blah
TEST:
TEST[0,1]: ~0,1


C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah
TEST:      .fld-blah
TEST[0,1]: .

f:         .fld-blah
TEST:      .fld-blah
TEST[0,1]: .

TEST появляется только после того, как группа команд FOR (...) завершится.

Так. Может кто-нибудь сказать мне:

  1. Могу ли я сделать for подстановочных знаков игнорировать имена папок, которые начинаются с точки?
  2. Существует ли синтаксис, который я могу использовать для применения оператора LEFT к переменной for , %%F?
  3. Есть ли способ, которым я могу назначить переменную И использовать ее в (...) цикле
  4. Есть ли какой-то другой метод, который я могу использовать для достижения своей цели (в DOS я знаю, что могу использовать Powershell, Cygwin и т.д.)?

1 ответ1

0

Занимался этим часами, и до меня дошло, для чего мне нужен Google.

Ответ заключается в использовании отложенного расширения переменной, поэтому скрипт test.bat становится:

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION
for /D %%f in ("fld-*") do (
set TEST=%%f
echo f:         %%f
echo TEST:      !TEST!
echo TEST[0,1]: !TEST:~0,1!
echo.
)

и ведет себя как требуется:

C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah"
TEST:      fld-blahblah
TEST[0,1]: f

f:         .fld-blah"
TEST:      .fld-blah
TEST[0,1]: .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .