我有一個 .csv 檔案,它看起來像這樣:
...
;OUTPUT;DISCRETE;VOLTAGE1;;
;OUTPUT;DISCRETE;VOLTAGE2;;
...
現在我想在這個 .csv 檔案中搜索字串,例如“VOLTAGE1”,如果找到,在找到搜索字串的行的開頭寫上“#”。
因此,批處理腳本完成后 .csv 檔案應如下所示:
...
#;OUTPUT;DISCRETE;VOLTAGE1;;
;OUTPUT;DISCRETE;VOLTAGE2;;
...
我已經找到了如何在檔案中搜索字串的方法,但我不知道如何在 for 回圈的“do”部分的行首寫入“#”。那么我該怎么做呢?
到目前為止我的代碼:
@echo off
setlocal
for /F "tokens=1* delims=;" %%a in ('findstr /I "VOLTAGE1" file.csv') do <write # to beginning of line>
endlocal
編輯:應該對原始 .csv 檔案進行更改,并且應該使用不同的搜索字串多次呼叫腳本。因此腳本的引數應該是 csv 檔案的路徑和搜索字串。
所以最后,在多次呼叫腳本后,包含搜索字串的每一行都應該以 # 開頭
uj5u.com熱心網友回復:
是powershell一種選擇嗎?例如:
ipcsv -d ';' -h a,b,c,d,e,f -pa infile.csv |
% { if ($_.d -like "voltage1") { $_.a = "#" }; $_ } |
ConvertTo-Csv -d ';' -nti | select -skip 1 |
% { $_ -replace '"','' }
或未打高爾夫球:
Import-Csv -Delimiter ';' -Header a,b,c,d,e,f -Path infile.csv |
ForEach-Object { if ($_.d -like "voltage1") { $_.a = "#" } $_ } |
ConvertTo-Csv -Delimiter ';' -NoTypeInformation |
Select-Object -skip 1 |
ForEach-Object { $_ -replace '"','' }
輸出:
#;OUTPUT;DISCRETE;VOLTAGE1;;
;OUTPUT;DISCRETE;VOLTAGE2;;
uj5u.com熱心網友回復:
@echo off
setlocal EnableDelayedExpansion
rem %1 is full file name
rem %2 is search string
set "n="
for /F "delims=:" %%n in ('findstr /N "%~2" %1') do set /A "n=%%n-1"
if not defined n goto :EOF
< %1 (
rem Copy N-1 lines
for /L %%i in (1,1,%n%) do set /P "line=" & echo !line!
rem Modify target line
set /P "line=" & echo #!line!
rem Copy the rest
findstr "^" 2>NUL
) > output.csv
move /Y output.csv %1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312631.html
上一篇:為什么子字串不適用于命令列引數
