Мой пакетный файл работает, но по какой-то причине также возвращает файл не найден - PullRequest
1 голос
/ 26 февраля 2010

Мой пакетный файл считывает все файлы из каталога Windows с возможностью включать в себя подкаталоги или не включать их, а затем сохраняет список в текстовый файл. Он прекрасно работает, но по какой-то причине приложение возвращает «Файл не найден» после того, как вы ответили «да» или «нет» на вопрос о подкаталогах (хотя вопрос работает правильно). Я новичок в пакетном программировании, и это поставило меня в тупик .. вот код:

@echo off

:start
set /P DIRECTORY=Type Directory to Search: 
if not exist %DIRECTORY% goto firstlogin

:choice
set /P c=Include Sub-Directories?[Y/N]?
if /I "%c%" EQU "Y" goto :somewhere
if /I "%c%" EQU "N" goto :somewhere_else
goto :choice


:somewhere
dir -r -n -c -m /s /b /o  "%DIRECTORY%" > C:\Users\Zack\Desktop\list_of_program_files.txt
exit


:somewhere_else

dir -r -n -c -m /b /o  "%DIRECTORY%" > C:\Users\Zack\Desktop\list_of_program_files.txt
exit

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

Ответы [ 3 ]

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

Я позволил себе немного изменить ваш сценарий:

@echo off

:start
set /P DIRECTORY=Type Directory to Search: 
if not exist %DIRECTORY% goto firstlogin

:choice
set /P c=Include Sub-Directories?[Y/N]?
if /I "%c%" EQU "Y" goto :somewhere
if /I "%c%" EQU "N" goto :somewhere_else
goto :choice


:somewhere
dir "%DIRECTORY%" /A:-r /O:-n /T:c /s /b /o 
goto :done


:somewhere_else

dir "%DIRECTORY%" /A:-r /O:-n /T:c /s /b /o 
goto :done

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

:done

Ваш пользователь может не иметь прав доступа ко всем подкаталогам, например

c:\>dir "System Volume Information"
 Volume in drive C is sys
 Volume Serial Number is 7A8D-49E2

 Directory of c:\System Volume Information

File Not Found
1 голос
/ 26 февраля 2010

Удалить -r -n -c -m из звонка на dir.

Или труба stderr в небытие с помощью 2>nul для подавления сообщения об ошибке.

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

Я новичок в пакетном программировании

Пара пунктов в виде конструктивной критики:

  1. вы можете извлечь @echo off (или REM), и вы получите лучшее понимание того, где находится ваш код, когда вы нажимаете на ошибки, поскольку каждая строка будет отображаться в консоли
  2. лучше использовать метку :END и направлять туда поток (GOTO END) вместо использования команды exit. Это позволит вам использовать пакет из другого пакетного файла и не рисковать выходом из обоих при завершении этого подпроцесса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...