如果没有找到文件,如何避免创建输出文件?

时间:2017-01-23 18:26:06

标签: windows batch-file error-handling

我有一个批处理脚本,询问路径,并询问我要在该路径中的文件夹和子文件夹中搜索的文件类型。然后它返回output.txt文件中这些文件的路径。

这是我的代码:

@echo on
set LOGFILE=output.txt
set /P userInputPath=Enter the path you'd like to search?
set /p "FileType=Enter file type(s) here (ex: txt, pdf, docx): "

call :LOG > %LOGFILE%
exit
:LOG
for %%A in (%FileType%) do (dir /b /s %userInputPath%\*.%%A)
@pause

我想避免创建output.txt文件,如果没有找到文件或输入的路径错误。任何人都可以帮我这个。谢谢!

4 个答案:

答案 0 :(得分:2)

你可以添加

for %%# in ("%LOGFILE%") do (
   if %%~z# equ 0 (
       del /s /q "%LOGFILE%"
   )
)

在最后。它检查日志文件的大小是否为0,如果是,则删除它。

答案 1 :(得分:2)

当没有处理数据时,你可以使用for /F命令返回 ExitCode 为1的能力,即:

(for /F "delims=" %%A in ('dir /b /s "%userInputPath%\*.%FileType%"') do echo %%A) > %LOGFILE% || rem
if errorlevel 1 del %LOGFILE%

请注意,此代码使用而不是子例程调用...

您可以在this questionfor /F命令中阅读有关如何使用ExitCode值的详细说明;寻找退出代码管理

答案 2 :(得分:1)

如果使用FOR命令列出文件,它将永远不会将输出重定向到日志文件,因为如果FOR命令不迭代任何文件名,则echo命令永远不会执行。

@echo off
set "LOGFILE=output.txt"
del "%logfile%"
:LOOP
set /P "userInputPath=Enter the path you'd like to search;"
set /p "FileType=Enter file type(s) here (ex: txt, pdf, docx):"
IF NOT EXIST "%userInputPath%" (
    echo %userInputPath% does not exist
    GOTO LOOP
)

for /R "%userInputPath%" %%G in (%FileType%) do echo %%G>>%LOGFILE%
pause

答案 3 :(得分:1)

另一个解决方案是查找具有隐藏文件属性集的文件,这些文件被命令 FOR 忽略:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "LOGFILE=output.txt"
set /P "userInputPath=Enter the path you'd like to search: "
set /P "FileType=Enter file type(s) here (ex: txt, pdf, docx): "

del "%LOGFILE%" 2>nul
for %%A in (%FileType%) do (
    for /F "delims=" %%B in ('dir /A-D /B /S "%userInputPath%\*.%%A" 2^>nul') do (
        >>"%LOGFILE%" echo %%B
    )
)
endlocal

此解决方案较慢,因为内部 FOR 读取命令 DIR 输出的所有行,下一步输出以处理 STDERR 重定向到日志文件。

命令 DIR 输出的错误消息将重定向到设备 NUL 以禁止它们。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • set /?
  • setlocal /?

另请参阅Microsoft TechNet文章Using command redirection operators