Windows 7 CMD: processando pastas ignorando aquelas iniciadas com um “.”

1

Eu quero encontrar uma pasta cujo nome comece com fld - . FOR me permite usar curingas:

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

No entanto, com as seguintes pastas:

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

também (um pouco inesperadamente) encontra o que está começando, ". ".

Eu decidi testar o primeiro caractere usando o operador ESQUERDA do DOS. Isso não parece funcionar em FOR variables (o %%F aqui), então eu preciso atribuí-lo a uma variável normal primeiro. Executando o seguinte arquivo .bat duas vezes (você verá o porquê):

@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.
)

produz a seguinte saída:

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 aparece apenas para ser atribuído depois que o grupo de comandos FOR (...) for concluído.

Alguém pode me dizer:

  1. Se eu posso fazer com que o curinga for ignore nomes de pastas que começam com um ponto?
  2. Se há sintaxe que eu possa usar para aplicar o operador LEFT à variável for , %%F ?
  3. Se existe uma maneira de atribuir uma variável AND , use-a dentro de um (...) loop
  4. Se existe algum outro método que eu possa usar para atingir meu objetivo (no DOS, eu sei que posso usar o Powershell, cygwin, etc.)?
por Bob Sammers 30.08.2013 / 18:18

1 resposta

0

Já estive nisso por horas e acabou de me dar conta do que eu precisava para o Google.

A resposta é usar a expansão de variável atrasada, então o script test.bat se torna:

@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.
)

e se comporta conforme necessário:

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]: .
    
por 30.08.2013 / 18:37