【问题标题】:Take the result of previous command safely : Batch (Wait,Sleep,Ping etc..)安全地获取先前命令的结果:批处理(Wait、Sleep、Ping 等)
【发布时间】:2013-11-20 09:26:29
【问题描述】:

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

  1. 移动一些文件夹
  2. 调用另一个批处理文件
  3. 将批处理文件的结果复制到剪贴板
  4. 运行 imacros(imacros 将使用剪贴板)

所以重要的是我必须确保每一步都完成。因为每一步都是连在一起的。

我的问题是我该怎么做?我读过一些关于 SLEEP、PING、TIMEOUT、PAUSE 等的东西。但我不太清楚利弊。有人可以提供一些关于这些命令的提示,或者我应该使用哪些来进行安全编程?

不是:我正在使用 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

【问题讨论】:

    标签: windows batch-file command imacros


    【解决方案1】:

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

    只需添加:

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

    在每项任务结束时。这样,您可以检查一切是否正常,然后再让批处理文件继续执行。稍后,您将学习在批处理文件中进行错误检查,在这种情况下,您可以对错误消息执行类似的操作,并将解决方案作为选项包含在内。

    编辑:

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

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

    既然,我不知道你在做什么,我只能帮助你了解情况 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的日志中。如果出现错误,它将重新启动,如果再次出现错误,它将退出。在这些事件中的任何一个之前都会有一个小暂停,以防您想取消它(只需关闭)

    希望对您有所帮助,

    莫娜。

    【讨论】:

    • 但我认为暂停命令会停止我的脚本并希望我按下某个键,我想让这个脚本整个自动化。所以脚本应该在没有任何干预的情况下开始和结束。那么你对这个时间有什么看法呢?
    • 感谢您的回复。
    【解决方案2】:

    第一个选项是,在每个“关键”命令之后,检查错误级别

    copy someThing someWhere
    if errorlevel 1 (
        rem something goes bad
        goto somewhereToHandleIt
    ) 
    

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

    【讨论】:

    • @Monacraft:你是对的,有时错误级别存在并且无法访问,但几乎所有命令都会更改错误级别。所有常用的文件操作命令都会改变错误级别。对于每一个不是,可以过滤/解析输出以生成错误级别或处理以测试错误条件。而且,只是我的看法,除了一些危急情况,或者当错误的存在可以避免的时候,要求系统做一些事情并测试错误的存在是编写批处理文件的最实用的方法。
    猜你喜欢
    • 2015-06-06
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2012-07-19
    • 2018-04-06
    • 2012-06-25
    相关资源
    最近更新 更多