用于跳过已关闭计算机的Windows批处理逻辑

时间:2014-11-06 14:59:42

标签: windows batch-file

我正在使用第三方实用程序(setacl.exe)获取所有权并更改许多联网计算机上单个文件的权限。我尝试使用Powershell,但放弃了,使用setacl.exe而不是批处理文件。然后脚本将32位IE可执行文件复制到64位文件夹(这需要完成的原因很复杂:))

批处理文件运行良好 - 它从文本文件中读取我想要进行更改的计算机 - 直到我关闭已关机的PC或已经运行受影响的进程。 / p>

我一直在玩跳过PC的逻辑,但我无法让它发挥作用。有人可以帮忙吗?脚本的复制部分(完美地运行)如下:


@echo off

set Logfile="%~dpn0.log"

for /f "usebackq delims=" %%i in (Computers.txt) do robocopy "\\%%i\C$\Program Files (x86)\Internet Explorer" "\\%%i\C$\Program Files\Internet Explorer" "iexplore.exe" >>%logfile%

2 个答案:

答案 0 :(得分:0)

ping检查怎么样?

for /f "tokens=5,7" %%a in ('ping -n 1 %%i') do (
  if "x%%a"=="xReceived" if "x%%b"=="x1," <your robocopy commandline here>
)

就在你的第一个for循环中。

也许这应该可以解决问题?

编辑: 这可能是一个更容易理解的版本:

@ECHO OFF
SET "LOGFILE=%~dpn0.log"

FOR /F %%I IN (Computers.txt) DO (
  FOR /F "TOKENS=3,5,7 SKIP=5 DELIMS=,= " %%A IN ('PING -n 1 %%I') DO (
    IF %%~A%%~B%%~C EQU 110 (
      CALL :RoboCopyJob %%I
    )
  )
)

GOTO :EOF


:RoboCopyJob
  ECHO ROBOCOPY "\\%~1\C$\Program Files (x86)\Internet Explorer" "\\%~1\C$\Program Files\Internet Explorer" "iexplore.exe" /R:0 /NP /LOG+:"%~DP0RoboCopy.log" /TEE >>"%LOGFILE%"
  GOTO :EOF

以上代码适用于我(保存到 .cmd / .bat文件)。我试图复制一些东西,使用了机器人命令行,我会用这些解决方案。 :) 请试一试。

答案 1 :(得分:0)

在命令行中,键入ROBOCOPY /?以查看所有选项。

这是本案的相关部分:

::
:: Retry Options :
::
               /R:n :: number of Retries on failed copies: default 1 million.
               /W:n :: Wait time between retries: default is 30 seconds.

               /REG :: Save /R:n and /W:n in the Registry as default settings.

               /TBD :: wait for sharenames To Be Defined (retry error 67).

/R:0作为参数添加到ROBOCOPY命令中。这将使ROBOCOPY在失败前重试0次。