如何防止批处理文件输出任何错误?
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
以下命令输出一些错误(例如“找不到指定的路径”...)。 我怎样才能阻止此命令显示任何内容?
@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