If statement 如何每天重命名多个文件
我试图用bat文件重命名多个文件 我使用下面的代码,效果很好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=" %
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
}