2016-02-18 2 views
1

Я делаю файл битого, который запрашивает каталог от пользователя и сделать каталог в побудил каталогприглашения каталога М.Д. с .bat файлом

@echo off 
set /p dir=enter directory: 
cd %dir% 
cd 
md assets 
cd assets 

md folder folder2 folder 

md addons 
cd addons 

md folder folder2 folder 

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

+3

Просьба привести примеры записей, которые вы сделали в приглашении «ввести каталог». Немного трудно оглянуться за плечо отсюда ... – Magoo

ответ

2

Первая рекомендация: Удалите (или закомментируйте) свой @echo off, чтобы вы могли видеть, что он делает, когда он работает. Это, скорее всего, сразу позволит понять, почему он не работает так, как вы ожидаете. После того как вы это работает так, как вы хотите, добавьте @echo off назад в

Второй рекомендации:. Вам может потребоваться некоторые проверки, чтобы убедиться, что ваш %dir% пригоден к команде cd. Например, если каталог %dir% фактически не существует, команда cd завершится с ошибкой. Или, если ваш ввод содержит букву диска (например, E:\newFolder\), команда cd не получит вас там, если вы не используете переключатель /d.

Третья рекомендация: Это хорошая практика, чтобы поместить ваши имена путей и переменные пути в кавычки, например:

set /p "dir=enter directory:" 

Вот альтернативный подход, который я предпочитаю, что избежать cd в пакетных файлах вообще. С некоторой проверкой ввода, введенной.

:SetDriveLetter 
set /p "drive=enter drive letter:" 
:: check for colon following drive letter, add it if it's not there 
:: (add whatever other input validation you think necessary) 
if not "%drive:~1%"==":" set drive=%drive%: 
if not exist "%drive%\" (
    echo invalid drive. 
    goto SetDriveLetter 
) 
:SetDirectory 
set /p "dir=enter directory:" 
:: check for backslash preceding the directory, remove it if it's there 
:: (add whatever other input validation you think necessary) 
if ^%dir:~0,1%==^\ set dir=%dir:~1% 
echo This will create folders in %drive%\%dir%\ 
choice /m "Continue with this operation?" 
if errorlevel 2 (
    echo Operation cancelled by user. 
    goto End 
) 
:: You can use the `md` command to create multiple directories in one line. 
:: I prefer to separate them out, one per line, for better readability. 
md "%drive%\%dir%\assets 
md "%drive%\%dir%\assets\folder" 
md "%drive%\%dir%\assets\folder2" 
md "%drive%\%dir%\assets\addons" 
md "%drive%\%dir%\assets\addons\folder" 
md "%drive%\%dir%\assets\addons\folder2" 

:End 
+0

Спасибо, я никогда раньше не использовал cmd, это все, что я знаю. Тем не менее, я пытался запустить ваш код, и он не работает, я думаю, что проблема начинается с 'choice' в' SetDirectory' – user3761386

+0

@ user3761386 К сожалению. У меня было несколько ошибок. Я исправил их. –

Смежные вопросы