从文本文件中添加变量以在批处理文件中的URL路径中使用

时间:2018-01-16 16:04:54

标签: windows batch-file url cmd

我在类似问题上阅读了几个主题,但到目前为止还无法找到具体的解决方案。我需要在许多计算机上执行批处理文件来修复损坏的管理代理。由于代理已损坏,我无法使用管理系统解决问题,而且我有一个使用WMIC的经过测试的解决方案。

我有一个包含计算机名称列表的文本文件,是否可以从文本文件中提取计算机名称并在下面的批处理文件中使用

@echo off

set compname=%computername%

IF EXIST "\\%compname%\C$\Install\" GOTO CopyFile

mkdir "\\%compname%\C$\Install\"

:CopyFile

copy "\\shareserver\sharefolder\AgentRepair.cmd" "\\%compname%\C$\Install\"

wmic /NODE:%compname% /USER:domain\username /PASSWORD:password process call create "c:\Install\AgentRepair.cmd" 

exit

2 个答案:

答案 0 :(得分:0)

@echo off

for /f "delims=" %%a in (filename) do (
 mkdir "\\%%a\C$\Install\" 2>nul >nul
 copy "\\shareserver\sharefolder\AgentRepair.cmd" "\\%%a\C$\Install\"
 wmic /NODE:%%a /USER:domain\username /PASSWORD:password process call create "c:\Install\AgentRepair.cmd" 
)
pause
exit

应该有效 - 在 filename

中的一行中有一个名称

%%a只是从文件中依次接收每一行。请注意,2>nul将命令生成的错误消息重定向到无处 - 如果目录已存在,mkdir / md命令将生成错误消息。

错误修复:每个%%a必须是相同的情况。我用wmic发布了%%A命令(在膝盖上平衡键盘)。这应该可以解决问题。将@echo off更改为@echo on将产生逐个命令的操作跟踪。

答案 1 :(得分:0)

另一种方法是让PowerShell执行调用工作。

=== AgentRepair.ps1

$InstDir = 'C:\Install'
if (-not Test-Path -Path $InstDir) { mkdir $InstDir }
Copy-Item '\\shareserver\sharefolder\AgentRepair.cmd' $InstDir
& $InstDir\AgentRepair.cmd

===运行它

Invoke-Command -ComputerName (Get-Content .\computernames.txt) -FilePath .\AgentRepair.ps1

===或者,从cmd.exe shell

powershell -NoProfile -Command ^
    Invoke-Command -ComputerName (Get-Content .\computernames.txt) -FilePath .\AgentRepair.ps1