If statement 如何每天重命名多个文件

If statement 如何每天重命名多个文件,if-statement,batch-file,cmd,rename,filenames,for-loop,windows-vista,If Statement,Batch File,Cmd,Rename,Filenames,For Loop,Windows Vista,我试图用bat文件重命名多个文件 我使用下面的代码,效果很好 for %%a in (*.csv) do ren "%%~a" "%%~na Sea %%~xa" 虽然问题是脚本每天都会运行,并且会逐渐添加多次“海”这个词 我不是那么有经验,但最有可能的解决办法将是简单的东西,如如果检查现有的名称 关于这一点,你有什么建议吗 还有没有办法让脚本每天在特定时间运行 提前谢谢你 尝试将当前命令替换为: for /f "delims=" %

我试图用bat文件重命名多个文件

我使用下面的代码,效果很好

for %%a in (*.csv) do ren "%%~a" "%%~na Sea %%~xa"
虽然问题是脚本每天都会运行,并且会逐渐添加多次“海”这个词

我不是那么有经验,但最有可能的解决办法将是简单的东西,如如果检查现有的名称

关于这一点,你有什么建议吗

还有没有办法让脚本每天在特定时间运行


提前谢谢你

尝试将当前命令替换为:

for /f "delims=" %%a in ('dir /b ^| findstr /V ".*Sea\.csv"') do ren "%%~a" "%%~na Sea %%~xa"

最简单的方法是使用PowerShell。如果您使用的是受支持的Windows系统。PowerShell将可用。当您确信文件将正确重命名时,请从重命名项命令中删除
-WhatIf

Get-ChildItem -File -Path 'C:\src\t' |
    Where-Object { $_.Name -notmatch ' Sea\.' } |
        ForEach-Object {
            Rename-Item -Path $_.FullName -NewName $($_.BaseName + ' Sea' + $_.Extension) -WhatIf
        }

如果存在名称冲突,此代码不会执行任何操作。例如,在第1天,一个
t.txt
文件被重命名为
t Sea.txt
。如果在第2天将另一个
t.txt
文件放入目录中,则无法重命名该文件,因为该文件已存在。

解决您的特定问题的方法是将已以字符串
Sea
结尾的文件基名从传递到您的
Do
部分。要做到这一点,最简单的方法是通过管道将命令传递到
findstr.exe

@For/F Delims^=%%G In('Dir/B/A:-D*.csv^ |%uu-AppDir_uuu%findstr.exe/EILV“Sea.csv”)Do@Ren“%%G”“%%~nG Sea%%~xG”

但是,由于“默认打开”8.3文件名,使用
Dir
可能会有问题。这意味着glob
*.csv
将匹配以不区分大小写字符串
.csv
开头的文件扩展名,而不是那些完全匹配该不区分大小写字符串的文件扩展名。虽然您不太可能拥有以
.csv
开头的其他扩展名,但我以前见过
.csvt
文件。因此,为了安全起见,您应该通过另一个
findstr
管道将
Dir
结果过滤到
.csv
首先:

@For/F Delims^=%%G In(“'Dir/B/A:-D*.csv |%\uuuu-AppDir\uuuu%findstr.exe/EIL.csv”|%\uuu-AppDir\uuuuu%findstr.exe/EILV“Sea.csv”“”)Do@Ren“%%G”“%~nG Sea%%~xG”
要忽略8.3命名,可以使用
where
命令(以及更新的命令)。但是,
where.exe
还有一个潜在的问题,因为它还将匹配
.csv.ext
,其中
.ext
将是当前环境的
%PATHEXT%
变量值中列出的每一个。为了防止出现这种情况,您需要为该特定环境清空
%PATHEXT%
变量:

@For/F Delims^=%%G In('(设置路径=)&%\uuuuuu AppDir\uuuu%where.exe.*.csv 2>NUL |%\uuuuu AppDir\uuuu%findstr.exe/EILV“Sea.csv”“)Do@Ren“%%G”“%%nG Sea%%~xG”

因此,我将敦促您使用下面两个示例中的任何一个,而不是本答案顶部的版本。

请回答您的问题并提供您自己的编码尝试!根据您的示例,新文件名不是
ho Sea.csv
,而是
ho Sea.csv
,请澄清!要定期运行脚本,请使用Windows任务计划程序…您好@aschipfl感谢您的友好输入。事实上,你是对的,我是在我的帖子上编辑的。我尝试使用windows任务计划程序,但cmd窗口打开,什么也没有发生。您发布的示例代码在第一天不会生成/重命名文件,如下图所示
ho Sea.csv
,而是生成如下所示的文件
ho Sea.csv
,我强烈建议您不要这样做。第二天,该文件将变成,
ho Sea.csv
,而不是像您的示例中那样的
ho Sea.csv
(注意
Sea
Sea
之间的双空格)。对于我认为您要使用的名称,您应该将重命名命令更改为
ren“%%~a”“%%~na Sea%%~xa”
。确实存在一些问题。编辑答案。好多了。使用
dir/b*.csv
使其更安全(避免重命名
.csv
以外的其他文件)…甚至使用
dir/b/A:-D-H-S*.csv
过滤掉目录、隐藏文件和系统文件…
Get-ChildItem -File -Path 'C:\src\t' |
    Where-Object { $_.Name -notmatch ' Sea\.' } |
        ForEach-Object {
            Rename-Item -Path $_.FullName -NewName $($_.BaseName + ' Sea' + $_.Extension) -WhatIf
        }