将TXT文件解析为批处理文件

时间:2017-07-09 05:27:34

标签: windows batch-file

我想从文本文件一次设置一行变量,使用此变量运行特定命令,然后循环返回,抓住第二行,处理命令,依此类推,直到文件结束。 / p>

批处理文件运行良好并要求用户输入,然后使用输入作为变量进行处理,完全没有问题。该脚本首先获取计算机名称,然后将安装文件复制到本地机器上,使用WMIC安装MSI:

@echo off
SET /P computer=Enter Computer Name
echo.
XCopy "\\server\netlogon\temp\*.*" "\\%computer%\c$\temp\*.*" /E /C /H /R /Y 
WMIC /Node:"%computer%" product call install true,"","c:\temp\msi_to_install.msi"

文本文件如下所示:

PC-01
PC-02
PC-27
Odd-PC

然而,当我尝试介绍" for"循环,这样我可以一次处理一百台或更多的机器,没有任何反应。即使我在文件中只有一行,我也无法让它工作。这就是我的尝试:

@echo off
For /F %%i in (c:\test.txt) do (
set computer=%%i
echo.
XCopy "\\server\netlogon\temp\*.*" "\\%computer%\c$\temp\*.*" /E /C /H /R /Y 
WMIC /Node:"%computer%" product call install true,"","c:\temp\msi_to_install.msi"
)

对于记录,我使用%%computer%%!computer!尝试了变量但没有成功。

我也在" SET"中使用或不使用/ p进行了以下操作。命令:

@echo off
SET /P computer=<"c:\test.txt"
echo.
XCopy "\\server\netlogon\temp\*.*" "\\%computer%\c$\temp\*.*" /E /C /H /R /Y 
WMIC /Node:"%computer%" product call install true,"","c:\temp\msi_to_install.msi"

我很感激任何建议或意见。

2 个答案:

答案 0 :(得分:1)

您需要参考delayed expansion上的一些SO文章,了解其工作原理的详细信息。

要使用!var!语法(在第一个%var%循环中代替for),您需要执行

setlocal enabledelayedexpansion

批处理中的早期(作为主线的一部分,而不是循环 - 例如,直接在@echo off之后或for循环之前)

但是,在您的情况下,由于computer设置为%%i,因此将%computer%替换为%%i应该是一种更简单的解决方案。

预期结果代码:

@echo off
setlocal enabledelayedexpansion
For /F %%i in (c:\test.txt) do (
set computer=%%i
echo.
XCopy "\\server\netlogon\temp\*.*" "\\!computer!\c$\temp\*.*" /E /C /H /R /Y 
WMIC /Node:"!computer!" product call install true,"","c:\temp\msi_to_install.msi"
)

@echo off
For /F %%i in (c:\test.txt) do (
echo.
XCopy "\\server\netlogon\temp\*.*" "\\%%i\c$\temp\*.*" /E /C /H /R /Y 
WMIC /Node:"%%i" product call install true,"","c:\temp\msi_to_install.msi"
)

答案 1 :(得分:0)

格式化输入文件并以ANSI格式保存后,这是最终的代码:

@echo off
setlocal enabledelayedexpansion
For /F %%i in (c:\computers.txt) do (
set computer=%%i
echo.
XCopy "\\server\netlogon\temp\msifolder\*.*" "\\!computer!\c$\temp\msifolder\*.*" /E /C /H /R /Y 
WMIC /Node:"!computer!" product call install true,"","c:\temp\msi_to_install.msi"
RD /S /Q "\\!computer!\c$\temp\msifolder\"
)

在我最后的脚本演示中,我正在复制MSI文件在本地的文件夹,安装MSI,然后在完成后删除文件夹。如果已安装MSI,您将收到此错误:

instance of __PARAMETERS
{
ReturnValue = 1603

要成功安装,您将获得ReturnValue = 0

@magoo在故障排除方面提供了很多指导,谢谢你,文件格式是最后一块拼图。