替换csv中没有大写字母和空格的文本

时间:2018-08-09 20:12:42

标签: batch-file

此脚本用csv的文件名替换了scv中的一些文本。

@echo off
setlocal enableextensions enabledelayedexpansion
for /R %%i in (*.csv) do (
ren "%%~i" temp.tmp
(for /F "usebackq tokens=*" %%f in ("%%~dpitemp.tmp") do (
    set "line=%%f"
    set "line=!line:REPLACE=%%~ni!"
    echo(!line!
)) > "%%~i"
del "%%~dpitemp.tmp"
)
endlocal

因此,该文件名为CSV File。文本将替换为"CSV File"。我的问题是如何格式化没有空格或大写字母的文本?
因此我的文件名为"CSV File",但替换为"csv-file"。我尝试先去除空格,所以尝试了以下方法:

@echo off
setlocal enableextensions enabledelayedexpansion
for /R %%i in (*.csv) do (
ren "%%~i" temp.tmp
(for /F "usebackq tokens=*" %%f in ("%%~dpitemp.tmp") do (
    ::Tried to strip out the spaces from %%~ni
    set %%~ni=%%%~ni: =%

    set "line=%%f"
    set "line=!line:REPLACE=%%~ni!"
    echo(!line!

)) > "%%~i"
del "%%~dpitemp.tmp"
)
endlocal

不可以,有人知道为什么吗?我确实做到了这一点:

    set "line=!line: =-!"

但是我不能这样做,因为它会影响整个csv。因此,我不确定是否有办法告诉该行仅影响替换文本?

修改后的代码:

@echo off
setlocal enableextensions enabledelayedexpansion
for /R %%i in (*.csv) do (
ren "%%~i" temp.tmp
(for /F "usebackq tokens=*" %%f in ("%%~dpitemp.tmp") do (
        set "line=%%f"
        echo %%~ni

        set MyVar=%%~ni
        set MyVar=!MyVar: =-!
        set MyVar=!MyVar:,=!
        echo !MyVar!

        set "line=!line:REPLACE=!MyVar!!"
        echo(!line!
)) > "%%~i"
del "%%~dpitemp.tmp"
)

我设法去除了空格和逗号,因此只需研究如何获得替换中的!MyVar!

1 个答案:

答案 0 :(得分:2)

我将使用powershell作为工具。

来自cmdline:

> type "TEST FILE.CSV"
One,two,three
bla,REPLACE,blubb
REPLACE,test,blah
tralala,blah,REPLACE

> for /f "delims=" %A in ('Dir /B/S "test*.csv"') do @powershell -Nop -c "(Get-Content '%~fA') -Replace 'REPLACE',('%~nxA').Replace(' ','-').ToLower()|Set-Content '%~fA'"

> type "TEST FILE.CSV"
One,two,three
bla,test-file.csv,blubb
test-file.csv,test,blah
tralala,blah,test-file.csv

在批处理文件中,将%符号加倍

@Echo off
for /f "delims=" %%A in (
    'Dir /B/S "test*.csv"'
) do powershell -Nop -c "(Get-Content '%%~fA') -Replace 'REPLACE',('%%~nxA').Replace(' ','-').ToLower()|Set-Content '%%~fA'"