我需要重命名子目录中的所有文件。子目录的名称不同,文件名也不同,但它们始终是 JPG 文件。我需要一个 BAT 脚本,它将每个目录中的名称更改为当前日期,并在末尾添加下一个数字,即:2021-01-05_1.jpg 2021-01-05_2.jpg 等。我在这个网站上找到了这样一个脚本,我重写了它,它运行良好,但在子目录中却不行。是否可以修改它以在子目录中执行此操作?
@echo off
setlocal EnableDelayedExpansion
set filename=%DATE%
set suffix=1000
for /F "delims=" %%i in ('dir /B *.jpg') do (
set /A suffix+=1
ren "%%i" "%filename%_!suffix:~1!.jpg"
)
答案1
也许你能理解 PowerShell。使用 PowerShell 而不是 cmd,因为 cmd 能做的所有事情,PowerShell 也能做,但 cmd 不支持 PowerShell 命令。
要打开 PowerShell,请使用Win+ R→type PowerShell
→ Ctrl+ Shift+Enter
然后,您可以使用以下代码在 PowerShell 中通过批处理文件获得与预期相同的结果:
$Filename=(Get-Date).tostring("yyyy-MM-dd")
$suffix=1
Get-ChildItem -path "path\to\folder" -file -force -recurse -filter "*.jpg" | foreach-object {
Rename-Item -path $_.fullname -NewName "${Filename}_${suffix}.jpg"
$suffix+=1
}
答案2
- 用一个
for /r (*.jpg)
环形:
@echo off && cd /d "%~dp0"
for /r %%i in (*.jpg)do set /a "_cnt+=1000+1" && (
cmd /v /c "ren "%%~i" "!date:/=-!_!_cnt:~-3!.jpg"" )
- 用一个
gci *.jpg -re; 1..$Itens.count |
环形:
[Array] $Itens = gci *.jpg -re; 1..$Itens.count | % {
ren $Itens[$_-1] -new " $((Get-Date).ToString("yyyy-MM-dd")+('_{0:d3}.jpg' -f [int]$_))" }