安全地获取上一个命令的结果:批处理(等待,睡眠,Ping等...)

时间:2013-11-20 09:26:30

标签: windows batch-file command imacros

我正在尝试创建一个正在执行以下操作的批处理文件:

  1. 移动一些文件夹
  2. 调用另一个批处理文件
  3. 将批处理文件的结果复制到剪贴板
  4. 运行imacros(imacros将使用剪贴板)
  5. 所以重要的是我必须确保它完成的每一步。因为每一步都是连在一起的。

    我的问题是我该怎么做?我读了一些关于睡眠,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
    

2 个答案:

答案 0 :(得分:1)

使用pauseecho命令是批量调试一段脚本的好方法。

只需添加:

Echo Task Complete: [Description] : Continue ?&>nul pause

每项任务结束时。这样,您可以在为批处理文件全部清除之前检查是否一切正常。稍后,您将学会在批处理文件中进行错误检查,在这种情况下,您可以执行与错误消息类似的操作,并将soloutions作为选项。

编辑:

如果您希望自动化脚本,以便它不需要用户输入,而是尝试检查ikf发生错误,您可以:

  • 检查manualy,即1:检查文件夹是否已移动,2:检查其他批处理文件是否执行了所需(创建新文件等)3:检查剪贴板是否有足够的行作为批处理文件的结果(可能在开始时清除它,最后,检查imacros是否做了所需的事情
  • 检查命令是否成功。 (将redirec错误重定向到文本文件,然后查看它们是否为任何文件。

因为,我不确切地知道你在做什么,我只能帮助你了解案例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
) 

或者,您可以添加代码来检查操作是否成功,测试所有内容是否存在。但第一种选择通常更好。信任系统,它将完成工作并在发现问题时进行报告。