我正在尝试编写一个批处理文件,如果文件名末尾没有包含特定的字符串,则会重命名文件名。例如,我有一个包含以下文件的文件夹:
测试File1.csv
测试文件2 Zac.csv
对于每个末尾(扩展名之前)不包含“Zac”(没有引号)的文件,我想在文件名中添加“Zac”。结果将是:
测试文件1 Zac.csv
测试文件2 Zac.csv
这是我目前用于批处理文件的内容:
for %%f in (*.csv) do (ren "%%f" ???????????????????????????????" Zac.csv"
但是这会将'Zac'添加到所有文件中,即使它们已经包含'Zac'。如何只更改那些最后没有'Zac'的文件?
非常感谢!
答案 0 :(得分:2)
for /f "delims=" %%a in ('dir /b /a-d *.csv ^|findstr /iv "zac"') do echo ren "%%~a" "%%~na Zac%%~xa"
查看输出,如果看起来不错,请删除echo
注意:如果文件已存在ren
失败,则会收到错误消息。
答案 1 :(得分:0)
这应该有效:
@echo off
: create variable to track number of files renamed
set filesRenamed=0
: loop through csv files and call Rename routine
for %%f in (*.csv) do call :Rename "%%f" filesRenamed
: output results
echo %filesRenamed% files renamed
: clear variables
set filesRenamed=
set tmpVar=
: Goto end of file so we don't call rename an extra time
goto :eof
:Rename
: need a local environment variable with filename for manipulation
set tmpVar=%1
: remove the closing quotes
set tmpVar=%tmpVar:~0,-1%
: compare the last 8 characters and rename as necessary
if /I NOT "%tmpVar:~-8%" EQU " Zac.csv" (
: use original file name parameter which is already quoted
ren %1 ???????????????????????????????" Zac.csv"
: increment the renamed file count
set /A %2=%2+1
)
有关批处理文件中子字符串处理的详细说明,请参阅this other post。
答案 2 :(得分:0)
使用renamer这些输入文件:
Test File1 Zac.csv
Test File2.csv
Test File3.csv
Test File4.xls
Test File5 Zac.csv
使用此命令:
$ renamer --regex --find '(Test File\d)(\.\w+)' --replace '$1 Zac$2' *
会产生这些新文件名:
Test File1 Zac.csv
Test File2 Zac.csv
Test File3 Zac.csv
Test File4 Zac.xls
Test File5 Zac.csv
如果您需要更多帮助,请与我们联系。