我有一個 .csv 像:
location,num1,num2,min,avg,med,max,std,
1344 and 640, 278.000000,8215.000000,0.000000,0.475325,0.465546;0.985196,0.168458,
我想在第一行包含字串“ID”,在第二行包含一個 ID 為的變數:
ID,location,num1,num2,min,avg,med,max,std,
134085,1344 and 640, 278.000000,8215.000000,0.000000,0.475325,0.465546;0.985196,0.168458,
我不知道如何在第二行包含 ID 變數。此 .csv 必須與新結果一起保存。
uj5u.com熱心網友回復:
此任務可以使用以下批處理檔案代碼:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F usebackq^ delims^=^ eol^= %%I in ("input.csv") do echo ID,%%I>"output.csv"& goto DataRows
:DataRows
(for /F usebackq^ skip^=1^ delims^=^ eol^= %%I in ("input.csv") do echo 134085,%%I)>>"output.csv"
rem if exist "output.csv" move /Y "output.csv" "input.csv"
endlocal
第一個僅處理當前目錄中for /F具有名稱的檔案的第一行。input.csv使用的for /F選項定義了一個空的字串分隔符串列并且沒有行尾字符,以獲取 CSV 檔案中的整行,其中檔案名包含在分配給回圈變數的雙引號中,I而不會忽略任何非空行。此行在ID,開頭輸出,并將輸出寫入output.csv當前目錄中具有名稱的新檔案。
在處理檔案的第一行之后,命令GOTO會跳轉到標簽下方的命令列以進行進一步處理。DataRowsinput.csv
這一次,整個for /F命令列用圓括號括起來,首先打開已經存在的檔案output.csv,并讓它一直打開,從input.csv跳過的第一行開始逐行添加一行,并使用命令ECHO134085,插入每個資料行輸出的開頭,然后重定向到永久打開的檔案,直到處理完所有行。output.csv
最后一行被注釋掉了。rem如果創建的檔案output.csv應該替換input.csv當前目錄中的檔案,請洗掉該命令。
for /F不使用包含在其中的引數字串指定選項的語法"是不尋常的,但唯一存在的方法是通過在引數字串的末尾使用delims=和eol=with來定義字串分隔符的空串列并且沒有行尾字符。eol=在這種情況下,有必要使用插入字符對每個等號和每個空格進行轉義,^因為選項未包含在其中,以便通過處理命令列而不是像往常一樣處理引數字串分隔符,"將每個空格和每個等號最初解釋為文字字符cmd.exe在命令FOR使用不再包含 any 的選項解釋引數字串之前^。
要了解使用的命令及其作業原理,請打開命令提示符視窗,在其中執行以下命令,并仔細閱讀每個命令顯示的所有幫助頁面。
echo /?endlocal /?for /?goto /?if /?move /?rem /?setlocal /?
也可以看看:
- Microsoft 檔案使用命令重定向運算子
- 使用 Windows 批處理檔案的具有多個命令的單行
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/491632.html
