2014-11-06 57 views
0

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

批处理文件运行良好 - 它读取我想要进行更改的计算机,从一个文本文件 - ,直到我点击一台断电的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% 
+0

这听起来很吓人你正在尝试做什么。 – 2014-11-06 15:03:29

+0

实际上,这很简单,只是缺少的IF THEN逻辑引发了我的循环(循环 - 得到它?:)) – Kvinneby 2014-11-06 15:08:56

+0

我的意思是手动管理一个像这样的微软文件。 – 2014-11-06 15:09:33

回答

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-loop中。

也许这应该做的伎俩?

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

@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文件)。没有testet复制的东西,使用robocopy命令行,我会用这种解决方案。 :) 请尝试。

+0

我试过这个,但脚本停摆了,我必须中断它 - 日志文件只显示robocopy标题和日期戳 – Kvinneby 2014-11-06 15:54:00

+0

既然我已经确定我的语法是正确的,它仍然停滞不前,并且日志显示'网络路径未找到' – Kvinneby 2014-11-06 16:17:28

+0

这将如何工作与这部分该脚本(我得到的命令的语法是不正确的)? (“ping -n 1 %% i”)中的/ f“usebackq delims =”%% i(Computers.txt)do(for/f“tokens = 5,7”%% a do(if“x %% a“==”xReceived“if”x %% b“==”x1,“ do setacl.exe -on”\\ %% i \ C $ \ Program Files \ Internet Explorer \ iexplore.exe“ - ot file -actn setowner -ownr“n:S-1-5-32-544”)>>%logfile%)) – Kvinneby 2014-11-06 19:02:48

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次。

+0

使用/ R:0 - 当它遇到不在网络上的PC时失败 - 脚本停止并且不会进入下一台PC。 – Kvinneby 2014-11-06 16:14:38

+0

当它遇到不可用的PC时它应该失败。它可能需要几秒钟才会失败,但那么'FOR'循环会继续。 – aphoria 2014-11-06 16:20:40

+0

你是对的 - 花费大约1-1.5分钟 – Kvinneby 2014-11-06 16:30:14