@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 会将错误消息发送到找不到路径的stderr。您可以通过使用2>nul 将stderr 重定向到nul 来消除错误消息。 2 是标准错误流。
由于cd 对脚本中的以下代码很重要,因此使用||,如果上一个命令失败,请使用exit /b 1 执行该命令之后的命令。
另外,为了避免回显到文件的尾随空格,您可以将重定向放在回显命令之前而不是之后,例如>>"%%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
请注意,我将 || 更改为 && 现在以成功而不是失败为条件。
Goto 可以帮助避免括号块:
@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