Пакетный файл не работает после модификации

0

У меня есть пакетный файл, который создает папки в других папках клиента. Я добавил еще одну папку, которую нужно сделать, теперь файл 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 перестать работать. Ценю твою помощь. Спасибо

Bigwil
источник
После того, как вы добавите его, каким образом он «перестанет работать»? Есть ошибки? Созданы ли какие-либо другие папки (все еще)? Если вы удалите строку, она снова работает, как ожидалось?
Ƭᴇcʜιᴇ007 15.01.15
Я запускаю cmd с повышенными привилегиями, запускаю файл .bat и получаю: система не может найти указанный путь. Если это помогает, эти папки создаются на подключенном диске к Sharepoint 2007. Если я удаляю строку сейчас, я получаю то же сообщение об ошибке.
Bigwil

Ответы:

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"
    )
)
Ƭᴇcʜιᴇ007
источник
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
JosefZ
источник