我的批处理文件有效,但由于某种原因也返回找不到的文件

时间:2010-02-26 00:07:40

标签: input batch-file

我的批处理文件从windows目录中读取所有文件,并选择包含子目录或不包含它们,然后将列表保存到txt文件。它完美地运行,但由于某种原因,在你对子目录问题回答是或否之后,应用程序返回“找不到文件”(虽然问题确实正常运行)..我是批处理编程的新手,这让我很难过..这是代码:

@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 个答案:

答案 0 :(得分:1)

-r -n -c -m的电话中删除dir

或者使用2>nul将stderr管道化为虚无以抑制错误消息。

答案 1 :(得分:1)

我冒昧地修改了你的脚本:

@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

答案 2 :(得分:0)

  

我是批处理编程的新手

通过建设性的批评指出几点:

  1. 您可以将@echo off取出(或REM),当您遇到错误时,您将更好地了解代码的位置,因为每一行都会回显到控制台< / LI>
  2. 最好将:END标签放入其中并将流指向(GOTO END),而不是使用exit命令。这将允许您在另一个批处理文件中使用批处理,并且在完成此子流程时不会冒着退出两者的风险。