如何防止批处理文件输出任何错误?

How do I prevent a batch file from outputting any error?

以下命令输出一些错误(例如“找不到指定的路径”...)。 我怎样才能阻止此命令显示任何内容?

@echo off

cd C:\test
for /d %%a in (*) do (
    echo [test]>"%%a\test.txt"
    echo %%a >>"%%a\test.txt"
)

欢迎任何帮助。

谢谢

运行 以下内容应该可以帮助您了解问题所在。

@echo off
setlocal

echo Starting script

echo Checking if directory exists
if exist "C:\test" (
    cd C:\test
    echo ... I found the Directory
    echo.
    echo Running loop
    for /d %%a in (*) do (
        echo.    Processing: "%%a"      
        echo [test]>"%%a\test.txt"
        echo %%a >>"%%a\test.txt"
    )
    echo ...Loop finished
) else (
    echo Whoops the directory "C:\test" does not exist
)
echo.
pause
@echo off

cd C:\test 2>nul || exit /b 1
for /d %%a in (*) do (
    echo [test]>"%%a\test.txt"
    >>"%%a\test.txt" echo %%a
)

如果 C:\test 不存在,则 cd 会将错误消息发送到 找不到路径 的标准错误。您可以通过使用 2>nul 将 stderr 重定向到 nul 来消除错误消息。 2 是标准错误流。

由于 cd 对于脚本中的以下代码很重要,因此使用 || ,如果先前的命令失败,请使用 exit /b 1 在该命令之后执行命令。

此外,为了避免回显到文件的尾随 space,您可以将重定向放在回显命令之前而不是之后,例如>>"%%a\test.txt" echo %%a.

或者例如来自评论:

@echo off
set "Source=C:\test"
set "Target=D:\data"

cd "%Source%" 2>nul || exit /b 1
if not exist "%Target%" exit /b 2

for /d %%a in (*) do (
    >  "%Target%\%%a\test.txt" echo [test]
    >> "%Target%\%%a\test.txt" echo %%a
)

pause
exit

源由 cd 的错误条件处理,目标由 if not exist 处理。所以如果 Target 不存在,exit /b 2,因为它不适合继续脚本。因此,您可以检查 errorlevel 1 或 2 脚本是否失败,如果 运行 即从命令提示符。

这是一个继续到脚本结尾的替代方法:

@echo off
set "Source=C:\test"
set "Target=D:\data"

cd "%Source%" 2>nul && (
    if exist "%Target%" (
        for /d %%a in (*) do (
            >  "%Target%\%%a\test.txt" echo [test]
            >> "%Target%\%%a\test.txt" echo %%a
        )
    )
)

pause
exit

请注意,我将 || 更改为 &&,现在条件是成功而不是失败。

转到可以帮助避免括号块:

@echo off
set "Source=C:\test"
set "Target=D:\data"

cd "%Source%" 2>nul || goto :step2

if not exist "%Target%" goto :step2

for /d %%a in (*) do (
    >  "%Target%\%%a\test.txt" echo [test]
    >> "%Target%\%%a\test.txt" echo %%a
)

:step2

rem other code

pause
exit