我正在尝试创建一个正在执行以下操作的批处理文件:
所以重要的是我必须确保它完成的每一步。因为每一步都是连在一起的。
我的问题是我该怎么做?我读了一些关于睡眠,PING,TIMEOUT,PAUSE等的内容。但我不太了解prons和cons。有人可以提供一些关于这些命令的提示,或者我应该使用哪些安全编程?
不是:我正在使用Windows XP和Windows Server 2008
这是我的批次代码:
@echo off
set cwd=D:\workset\xx\yyy\
set wp=D:\workset\xx\yyyy\zzzzz\
:: ensure folder exist
mkdir %cwd% > nul 2>&1
mkdir %wp%\done > nul 2>&1
d:
cd %wp%
:export
::echo tidy folder %wp%
for %%i in (xx_to_yy*.zip) do (
move "%%i" "done\%%i"
)
echo call %cwd%aaa_bbb_export.bat
call %cwd%aaa_bbb_export.bat 5555
@echo off
for %%i in (xx_to_yy*.zip) do (
echo %wp%%%i | clip
move "%%i" "done\%%i"
)
@echo off
:finish
start "" "C:\Program Files\Mozilla Firefox\firefox.exe" http://www.google.com
ping 127.1.1.1
start "" "C:\Program Files\Mozilla Firefox\firefox.exe" imacros://run/?m=yyy.iim
答案 0 :(得分:1)
使用pause
和echo
命令是批量调试一段脚本的好方法。
只需添加:
Echo Task Complete: [Description] : Continue ?&>nul pause
每项任务结束时。这样,您可以在为批处理文件全部清除之前检查是否一切正常。稍后,您将学会在批处理文件中进行错误检查,在这种情况下,您可以执行与错误消息类似的操作,并将soloutions作为选项。
如果您希望自动化脚本,以便它不需要用户输入,而是尝试检查ikf发生错误,您可以:
因为,我不确切地知道你在做什么,我只能帮助你了解案例2(虽然1会更好)。您将错误重定向为:
command [parameters] 2>>errors.log
在每个部分的末尾:
set /p error=<errors.log
if defined error (
Echo An Error Occured : Last Step == [Step Description]
ECHO ---------- RUN : %Date% %Time% ----------
type errors.log >> error-log.txt
del errors.log
if "%~1"=="RESTART" (
Echo Error Occured Two Times in a Row . . .
Echo Exiting in 20 seconds . . .
Exit /b 9
)
Echo Restarting procedure in 60 seconds . . .
sleep 60
Start %~f0 "RESTART"
Exit
)
上面的代码将检查是否有任何错误,将它们添加到名为error-log.txt的日志中。如果有错误,它将重新启动,如果再次出现错误,它将退出。在这些事件中的任何一个之前会有一个小的停顿,因为你想要取消它(简单地关闭)
希望您觉得这很有帮助,
莫纳。
答案 1 :(得分:0)
第一个选项是,在每个“关键”命令之后,检查errorlevel
copy someThing someWhere
if errorlevel 1 (
rem something goes bad
goto somewhereToHandleIt
)
或者,您可以添加代码来检查操作是否成功,测试所有内容是否存在。但第一种选择通常更好。信任系统,它将完成工作并在发现问题时进行报告。