У меня есть пакетный файл, который создает папки в других папках клиента. Я добавил еще одну папку, которую нужно сделать, теперь файл bat не будет работать. Я что-то здесь упускаю?

@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 - это новая строка, которую я добавил, что заставило файл bat перестать работать. Ценю твою помощь. Спасибо

2 ответа2

0

У вас больше закрывающих скобок, чем открывающих в вашем блоке 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**

Снимите дополнительную закрывающую скобку и попробуйте снова:

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"
    )
)
0

Замечания:

  • setlocal disabledelayedexpansion потому что вам не нужно включать отложенное расширение
  • set "Year=2015" в двойных кавычках, чтобы избежать лишних пробелов
  • set "Dir=y:\Directory of companies"
  • md "%Dir%\%%D\%Year%" 2>nul для подавления сообщений об ошибках (перенаправить их в ад с помощью 2>nul), если целевой каталог существует. Поэтому вам не нужно проверять, существует ли он или нет
  • ваш, if not exist "!Dir!\%%D\!Year!" (...) запрещено создавать каталоги, добавляя строку и запуская ее более одного раза ...

Этот скрипт должен работать для вас.

@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

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