我一直在瀏覽許多不同的帖子,但找不到適合我的批處理腳本。我們有一個應用程式,它只輸出一個名為 SALES.CSV 的檔案。這是其中一行的樣子:
DUNKAN,172225A,11/18/21,2655,11/03/21,11/25/21,1100,"",1,0,"Freight (Distance)",3100,1,-1578.5,FLAEX
根據最后一個詞是什么,這就是我需要的檔案命名。對于這一行,檔案將重命名為 SALESFLAEX.CSV。他們只需要尋找幾個不同的詞:PREHA、FLAEX 和 PWGEX。這些詞永遠不會出現在同一個檔案中。所以我只需要找到檔案中當前存在的單詞。我確實找到了這段代碼并對其進行了修改,但它僅適用于一個檔案。
findstr /m "FLAEX" SALES.CSV >Nul
if %errorlevel%==0 (
ren SALES.CSV SALESFLAEX.CSV
)
if %errorlevel%==1 (
echo "FLAEX" wasn't found within the Log.txt file!
)
pause
有沒有人有更好的方法來解決這個問題?
uj5u.com熱心網友回復:
有幾種方法,一種是使用for /F回圈將檔案內容作為字串讀取,然后使用第二個for回圈將其拆分為公共分隔符,,然后將每個結果設定為變數,其中只有最后一個結果將存盤為最終結果:
@echo off
for /f "usebackq delims=" %%i in ("SALES.csv") do for %%a in (%%i) do set "last=%%~a"
ren "sales.csv" "sales%last%.csv"
uj5u.com熱心網友回復:
您現有的方法沒有太大問題,我只是使用條件執行而不是錯誤級別:
@For %%G In (PREHA FLAEX PWGEX)Do @%SystemRoot%\System32\find.exe /I "%%G"<"P:\athTo\SALES.csv">NUL 2>&1&&(Ren "P:\athTo\SALES.csv" "SALES%%G.csv")||Echo %%G was not found.>"P:\athTo\log.txt"
如果您沒有將 final 寫入echo名為log.txt將 final 更改"P:\athTo\log.txt"為CON, (或>"P:\athTo\log.txt"完全洗掉)的檔案。也請記得P:\athTo\根據需要修改
uj5u.com熱心網友回復:
這是另一種方法:
rem // Read (last) line from file that ends with one of the desired words:
for /F "delims=" %%L in ('findstr /E ",PREHA ,FLAEX ,PWGEX" "SALES.CSV"') do set "LINE=%%L"
rem // Use code injection approach to extract the string behind the last `,`:
set "LINE=%LINE:,=" & set "LAST=%"
rem // Actually rename the file, or report error if not possible:
if defined LAST (ren "SALES.CSV" "SALES%LAST%.CSV") else >&2 echo ERROR!
根據您的示例字串:
DUNKAN,172225A,11/18/21,2655,11/03/21,11/25/21,1100,"",1,0,"Freight (Distance)",3100,1,-1578.5,FLAEX
代碼注入行擴展為(因為它用,部分替換了 each " & set "LAST=):
set "LINE=DUNKAN" & set "LAST=172225A" & set "LAST=11/18/21" & set "LAST=2655" & set "LAST=11/03/21" & set "LAST=11/25/21" & set "LAST=1100" & set "LAST=""" & set "LAST=1" & set "LAST=0" & set "LAST="Freight (Distance)"" & set "LAST=3100" & set "LAST=1" & set "LAST=-1578.5" & set "LAST=FLAEX"
它LAST多次設定變數并始終覆寫它,留下最后一個值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370622.html
