2014-10-29 117 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 /?的說明。

相關問題