2014-10-29 119 views
0

这里是我正在尝试的代码。它只会导致最后一行被创建。所以我猜其他文件被覆盖,虽然我试图移动他们,并没有workeD?如何在CSV文件中创建多个txt文件名称

for /f "usebackq tokens=1-8 delims=," %%a in ("chassisinfo.csv") do (
set hostname=%%a 
set FQDN=%%b 
set MGMT=%%c 
set SUB=%%d 
set gw=%%e 
set dns=%%f 
set vlan=%%g 


echo # Seans scripted installation file > ks_%hostname%.cfg 
echo # >> ks_%hostname%.cfg 
echo # Accept the VMware End User License Agreement >> ks_%hostname%.cfg 
echo vmaccepteula >> ks_%hostname%.cfg 
echo # Set the root password for the DCUI and Tech Support Mode >> ks_%hostname%.cfg 
echo rootpw >> ks_%hostname%.cfg 
echo # The install media is in the CD-ROM drive >> ks_%hostname%.cfg 
echo install --firstdisk --overwritevmfs >> ks_%hostname%.cfg 
echo keyboard 'United Kingdom' >> ks_%hostname%.cfg 

echo network --bootproto=static --device=vmnic0 --ip=%MGMT% --netmask=%SUB% --gateway=%gw% --nameserver=%dns% --vlanid=%vlan% --hostname=%hostname%%FQDN% >> ks_%hostname%.cfg 
move ks_%hostname%.cfg d:\KSscripts\ 



) 
+0

请解释你期望它做什么,以及它做什么。我们不是心灵感应 – 2014-10-29 21:46:56

+0

它是一个为CSV的每一行创建一个CFG文件的脚本。 cfg文件由列A(主机名)命名。每列都有一个不同的属性,我在脚本的不同部分使用。这就是我想要的,并创建脚本,但只能用于CSV文件的最后一行。我不知道为什么它跳过了其余的线。尽管我希望它跳过CSV的第一行,因为这是标题/标题,而不是数据。希望更清楚。 – user2026188 2014-10-29 21:56:56

回答

0

您正在重新创建每行的文件,因为该行中的单个>。

echo # Seans scripted installation file > ks_%hostname%.cfg 

更改为下面的行。请注意,如果文件名中有空格,我也会在文件名中加上引号。在所有情况下这样做都是一个好主意。

echo # Seans scripted installation file >> "ks_%hostname%.cfg" 

那么你应该把这样一行就行了,你开始第一行之前,你的代码的上方,以确保你不追加到一个旧文件。

if exist "ks_%hostname%.cfg" del /f /q "ks_%hostname%.cfg" 

编辑...要跳过第一行,改变你的语句:

for /f "usebackq tokens=1-8 skip=1 delims=," %%a in ("chassisinfo.csv") do (
0

你的代码做创建刚刚过去的文件,但分配与上次值的文件到%hostname%变量,也就是程序第一次运行它应该创建一个名为“ks_.cfg”的文件。如果批处理代码没有SETLOCAL命令,则第二次和下一次运行它会创建带有最后一行名称的文件。

原因是在执行FOR命令之前,%hostname%变量值被扩展了一次,因此所有的循环都以相同的值执行。您可以通过两种方式解决这个问题:用原件替换参数,而不是变量:

for /f "usebackq skip=1 tokens=1-8 delims=," %%a in ("chassisinfo.csv") do (

echo # Seans scripted installation file > ks_%%a.cfg 
echo # >> ks_%%a.cfg 

. . . . 

move ks_%%a.cfg d:\KSscripts\ 

) 

或者使用延迟扩展:在你的程序的begining插入setlocal EnableDelayedExpansion命令和!hostname!改变所有%hostname%扩展。有关详细信息,请在本网站中查找“延迟扩展”或阅读set /?的说明。

相关问题