Arquivo em lote não funciona após modificação

0

Eu tenho um arquivo em lotes que cria pastas em outras pastas do cliente. Eu adicionei uma pasta adicional para ser feita agora o arquivo bat não vai funcionar. Estou faltando alguma coisa aqui?

@echo off

set Dir=y:\(Directory of companies)
set Year=(The year I want the folders added to)


setlocal enabledelayedexpansion

for /f "delims=" %%D in ('dir /ad/b !Dir!') do (
    if not exist "!Dir!\%%D\!Year!" (
    md "!Dir!\%%D\!Year!"
    md "!Dir!\%%D\!Year!\Tax"
    md "!Dir!\%%D\!Year!\Tax\Estimated_Tax"
    md "!Dir!\%%D\!Year!\Tax\Info_for_tax_return"  
    md "!Dir!\%%D\!Year!\Year_End_Planning"
    )
  )
)

Info_for_tax_return é a nova linha que adicionei que fez o arquivo bat parar de funcionar. Agradeço sua ajuda. Obrigado

    
por Bigwil 15.01.2015 / 16:12

2 respostas

0

Você tem mais parênteses de fechamento do que os que estão abrindo no bloco for :

for /f "delims=" %%D in ('dir /ad/b !Dir!') do ( **<-1**
    if not exist "!Dir!\%%D\!Year!" ( **<-2**
    md "!Dir!\%%D\!Year!"
    md "!Dir!\%%D\!Year!\Tax"
    md "!Dir!\%%D\!Year!\Tax\Estimated_Tax"
    md "!Dir!\%%D\!Year!\Tax\Info_for_tax_return"  
    md "!Dir!\%%D\!Year!\Year_End_Planning"
    ) **<-1**
  ) **<-2**
) **<-3**

Remova o colchete de fechamento extra e tente novamente:

for /f "delims=" %%D in ('dir /ad/b !Dir!') do (
    if not exist "!Dir!\%%D\!Year!" (
        md "!Dir!\%%D\!Year!"
        md "!Dir!\%%D\!Year!\Tax"
        md "!Dir!\%%D\!Year!\Tax\Estimated_Tax"
        md "!Dir!\%%D\!Year!\Tax\Info_for_tax_return"  
        md "!Dir!\%%D\!Year!\Year_End_Planning"
    )
)
    
por 15.01.2015 / 16:18
0

Nota:

  • setlocal disabledelayedexpansion porque você não precisa de expansão atrasada ativada
  • set "Year=2015" entre aspas duplas para garantir que nenhum espaço em branco indesejado adicional
  • set "Dir=y:\Directory of companies" também
  • md "%Dir%\%%D\%Year%" 2>nul para suprimir mensagens de erro (redirecione-as para o inferno com 2>nul ) se o diretório de destino existir. Portanto, você não precisa testar se existe ou não
  • seus if not exist "!Dir!\%%D\!Year!" (...) não permitiram criar diretórios que adicionaram uma linha e foram lançados mais de uma vez ...

Este script deve funcionar para você.

@echo off
setlocal disabledelayedexpansion

set "Dir=y:\Directory of companies"
set "Year=2015"
:: (The year I want the folders added to)

for /f "delims=" %%D in ('dir /ad/b %Dir%') do (
    md "%Dir%\%%D\%Year%" 2>nul
    md "%Dir%\%%D\%Year%\Tax" 2>nul
    md "%Dir%\%%D\%Year%\Tax\Estimated_Tax" 2>nul
    md "%Dir%\%%D\%Year%\Tax\Info_for_tax_return" 2>nul  
    md "%Dir%\%%D\%Year%\Year_End_Planning" 2>nul
)
endlocal
    
por 15.01.2015 / 16:47