2014-11-06 55 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