我需要清除networking中多个服务器上的相同目录。 我该怎么做呢?

在多个(大约20个)服务器上,存在相同的目录C:\ Deployments。 该目录有多个子文件夹,其中包含更多的子文件夹和文件。 C:\ Deployments目录本身不包含文件。

我有一个batch file,在本地运行时,会清除C:\ Deployments目录。 也就是说,它会删除所有子文件夹及其文件,但不会删除C:\ Deployements目录本身。

batch file代码是:

echo off set CAT=c:\deployments dir "%%CAT%%"/s/b/a | sort /r >> %TEMP%\files2del.txt for /f "delims=;" %%D in (%TEMP%\files2del.txt) do (del /q "%%D" & rd "%%D") del /q %TEMP%\files2del.txt 

我的问题是这样的:

如何从本地化的窗口在每个服务器上运行这个batch file? 也就是说,如何运行一个batch file,并同时在每个服务器上执行这些命令?

感谢您的任何帮助/想法!

我没有Windows机器了,但是在工作中用来做这个东西。 有psexec,它允许您远程到另一台服务器。 你也可以看看PowerShell的远程处理。

Powershell远程看到http://msdn.microsoft.com/en-us/library/windows/desktop/ee706585(v=vs.85).aspx

使用Dos / Batch,请参阅http://ss64.com/nt/psexec.html

如果您希望它们同时运行,那么可以通过在powershell中运行作业来完成此操作,请参阅相同的ss64站点。

如果你感兴趣…

如果您的服务器在活动目录中列出,您可以使用Active Directory在计算机上循环播放一些小技巧

 dsquery computer -limit 0 | ?{$_ -imatch "CN=([^,]+),"} | % { #remotely run your script here through ps remote } 

或用gc $ your_file_namereplace包含文件列表的dsquery …。 DOS /批处理 – 我的语法可能会closures,但是这是循环计算机的好方法

 for /f "eol=, tokens=1, delims=" %cc in ('dsquery computer -name -limit 0 ^| find /i /r /c:'"CN=([^,]+),"') do ( @REM cannot recall how i used to get back references in dos like this, so may be off. @REM call your script here, passing your batch program to psexec set computer=%%c echo computer=!computer! ) 

或用types“%your file name%”replacedsquery …

另外,如果你碰到一个问题,在批处理循环中设置variables,如果你不能像预期的那样持续保存variables,那么把setlocal enabledelayedexpansion放在你的程序的顶部,然后评估你的variables!var_name! 而不是%var_name%

我想build议WinRM / WinRS(Windows远程pipe理/ Windows远程shell)组合需要一点点的设置事先,但使用已经内置到Windows中的工具。

完成安装后,脚本将需要更改以包含winrs命令进行连接。 您可以在另一个文本文件中创build一个服务器列表,并在您当前的脚本中包含另一个FOR循环,以避免20行代码执行相同的操作。

坦率地说kikuchiyo的答案是真棒,我已经投了多less。 但是为了完整起见,我build议你可以映射到每个服务器并通过远程共享删除这些文件。

我假设一个域pipe理员在这里,或者至less一个在每台机器上都有pipe理员的帐户。

但基本上我会做这样的事情(保持你的代码做这项工作,而不是我怎么做,但这并不意味着我是对的)

servers.txt只是服务器主机名/ IP地址的列表

在(servers.txt)中为/ f %% a做:处理%% a

:处理

设置SERVER =%1

IF [%SERVER%] == [] GOTO EOF

NET USE T:\%SERVER%\ C $ \ Deployments

设置CAT = T:

dir“%% CAT %%”/ s / b / a | sort / r >>%TEMP%\ files2del.txt

for / f“delims =;” %% D in(%TEMP%\ files2del.txt)do(del / q“%% D”&rd“%% D”)

del / q%TEMP%\ files2del.txt

:EOF