我的文件夹中有以下同名文件。只是扩展名不同。所有文件都是有效的 jpg,但扩展名错误。
如何将它们重命名为扩展名.jpg,并使用不同的前缀?
ren *.* *.jpg
----> 不适合我,因为它们都有相同的前缀
您可以在命令提示符、PowerShell 提示符或批处理文件中使用
ForFiles
实用程序来执行此类任务。
forfiles /p "C:\directory\with\images" /m "1.*" /c "cmd /c ren @file [email protected]"
这应该适合你:
Clear-Host
$directoryPath = "C:\directory\with\images"
#Getting all files with "1.*" from $directoryPath
$foldercontent = Get-ChildItem -Path $directoryPath -Filter "1.*" | Where-Object { ! $_.PSIsContainer }
foreach($item in $foldercontent) {
Move-Item -Path $item.FullName -Destination "$directoryPath\image$($item.Extension).jpg"
}
文件名称为:
image.J84.jpg
image.J85.jpg
可以使用以下批处理文件将文件重命名为
1.J73
至 image_73.jpg
:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "ImageFolder=C:\directory\with\images"
for /F "tokens=2 delims=Jj." %%I in ('dir "%ImageFolder%\1.J*" /A-D /B 2^>nul') do ren "%ImageFolder%\1.J%%I" "image_%%I.jpg"
endlocal
在后台又用命令行执行了一个命令进程:
C:\Windows\System32\cmd.exe /c dir "C:\directory\with\images\1.J*" /A-D /B 2>nul
DIR 在指定目录中搜索
/A-D
而仅显示文件(属性而不是目录)1.J*
和 STDOUT(标准输出)的选项
/B
,仅以裸格式输出找到的文件的名称,没有路径。DIR 将输出一条错误消息来处理 STDERR(标准错误)。通过使用 2>nul
将其重定向到设备
NUL可以抑制此错误消息。
阅读有关 使用命令重定向运算符的 Microsoft 文档,了解
2>nul
的说明。重定向运算符 >
必须在 FOR命令行上使用脱字符号
^
进行转义,以便在 Windows 命令解释器在执行命令 FOR(执行嵌入的 dir
命令行)之前处理此命令行时将其解释为文字字符使用在后台启动的单独命令进程。
DIR到STDOUT的输出由Windows命令处理器
cmd.exe
捕获,处理批处理文件并在启动后逐行处理cmd.exe
自行关闭。
FOR 与选项
/F
忽略此处不出现的空行。默认情况下,非空行将使用普通空格和水平制表符作为字符串分隔符分成子字符串。接下来将检查第一个子字符串的第一个字符是否为分号,默认情况下是行尾字符,在这种情况下,该行将被忽略以进行进一步处理。否则,第一个子字符串将被分配给指定的循环变量,并且FOR循环体中的命令将由cmd.exe
执行。
线路处理的默认行为由使用的选项
tokens=2
和 delims=Jj.
修改。字符串分隔符用 J
和 j
和 .
重新定义,这意味着像 1.J73
这样的文件名被分成两个子字符串 1
和 73
。选项 tokens=2
指示 FOR 将第二个子字符串(标记)分配给指定的循环变量 I
。默认的 eol=;
被保留,因为在这种情况下第一个子字符串始终是 1
,因此这里不会忽略任何文件名。因此,对于名称为 1.J73
或 1.j73
的文件,字符串 73
被分配给循环变量 I
。
然后使用当前文件的完全限定文件名和带有前缀 image_
的新文件名以及现有文件名中的文件编号和文件扩展名
.jpg
执行重命名命令 REN。因此,如果尚不存在名称为
1.J73
的文件,并且要重命名的文件当前未由应用程序以防止在应用程序打开时重命名该文件的方式打开,则该文件将从 image_73.jpg
重命名为 image_73.jpg
申请。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
cmd /?
dir /?
echo /?
endlocal /?
for /?
ren /?
set /?
setlocal /?