Пакетный файл работает правильно только тогда, когда пользователь вводит да на оба вопроса .. в противном случае происходит сбой - PullRequest
1 голос
/ 26 февраля 2010

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

@echo off
:start
set /P DIRECTORY=Type Directory to Search: 
if not exist %DIRECTORY% goto :firstlogin
set /P FILENAME=Type the name for your output file:


:choice
set /P c=Include Sub-Directories?[y/n]?
if /I "%c%" EQU "Y" goto :somewhere
if /I "%c%" EQU "y" goto :somewhere
if /I "%c%" EQU "Yes" goto :somewhere
if /I "%c%" EQU "yes" goto :somewhere
if /I "%c%" EQU "YES" goto :somewhere
if /I "%c%" EQU "N" goto :somewhere_else
if /I "%c%" EQU "n" goto :somewhere_else
if /I "%c%" EQU "No" goto :somewhere_else
if /I "%c%" EQU "no" goto :somewhere_else
if /I "%c%" EQU "NO" goto :somewhere_else
goto :choice


:somewhere
set /P d=Include Hidden and System Files?[y/n]?
if /I "%d%" EQU "Y" goto :d1
if /I "%d%" EQU "y" goto :d1
if /I "%d%" EQU "Yes" goto :d1
if /I "%d%  EQU "yes" goto :d1
if /I "%d%" EQU "YES" goto :d1
if /I "%d%" EQU "N" goto :d2
if /I "%d%" EQU "n" goto :d2
if /I "%d%" EQU "No" goto :d2
if /I "%d%" EQU "no" goto :d2
if /I "%d%" EQU "NO" goto :d2
goto :somewhere

:d1
echo The Program Will Exit When Operations are Completed....
Pause
echo Working Please Wait... 
Pause
dir /a /s /b /o  "%DIRECTORY%" > C:\Users\Zack\Desktop\%FILENAME%.txt
exit


:d2
echo The Program Will Exit When Operations are Completed....
Pause
echo Working Please Wait... 
Pause
dir /s /b /o  "%DIRECTORY%" > C:\Users\Zack\Desktop\%FILENAME%.txt
exit



:somewhere_else
set /P e=Include Hidden and System Files?[y/n]?
if /I "%e%" EQU "Y" goto :e1
if /I "%e%" EQU "y" goto :e1
if /I "%e%" EQU "Yes" goto :e1
if /I "%e%" EQU "yes" goto :e1
if /I "%e%" EQU "YES" goto :e1
if /I "%e%" EQU "N" goto :e2
if /I "%e%" EQU "n" goto :e2
if /I "%e%" EQU "No" goto :e2
if /I "%e%" EQU "no" goto :e2
if /I "%e%" EQU "NO" goto :e2
goto :somewhere_else


e1:
echo The Program Will Exit When Operations are Completed....
Pause
echo Working Please Wait... 
Pause
dir /a /b /o  "%DIRECTORY%" > C:\Users\Zack\Desktop\%FILENAME%.txt
exit


e2:
echo The Program Will Exit When Operations are Completed....
Pause
echo Working Please Wait... 
Pause
dir /b /o "%DIRECTORY%" > C:\Users\Zack\Desktop\%FILENAME%.txt
exit


:firstlogin
echo Directory does not exist!
Pause
goto :start


:done
SET stg=
SET /P stg=Start again?[y/n]? 
cls
IF %stg% == Y goto :START
IF %stg% == y goto :START
IF %stg% == yes goto :START
IF %stg% == Yes goto :START
IF %stg% == YES goto :START

1 Ответ

2 голосов
/ 26 февраля 2010

Это простая опечатка:

e1: 
echo The Program Will Exit When Operations are Completed.... 

должно быть:

:e1
echo The Program Will Exit When Operations are Completed.... 

То же самое для e2:, должно быть :e2.

Обратите внимание на сообщения об ошибках ...

Изменить:

О вашем комментарии, проверьте:

:somewhere 
set /P d=Include Hidden and System Files?[y/n]? 
if /I "%d%" EQU "Y" goto :d1 
if /I "%d%" EQU "y" goto :d1 
if /I "%d%" EQU "Yes" goto :d1 
if /I "%d%  EQU "yes" goto :d1 

В последней строке отсутствует " после "%d.

Очень легко отлаживать подобные вещи. Просто измените echo off на echo on в начале, и вы увидите, какая строка была выполнена последним, и сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...