如果filename缺少字符串,则使用批处理文件重命名文件

时间:2013-09-26 20:20:26

标签: batch-file filenames file-rename batch-rename

我正在尝试编写一个批处理文件,如果文件名末尾没有包含特定的字符串,则会重命名文件名。例如,我有一个包含以下文件的文件夹:

测试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'的文件?

非常感谢!

3 个答案:

答案 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

如果您需要更多帮助,请与我们联系。