此脚本用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!
。
答案 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'"