重命名cmd中的多个文件

时间:2013-06-24 08:57:57

标签: windows batch-file cmd wildcard rename

如果我在目录中有多个文件并且想要将某些内容附加到他们的文件名中,而不是附加到扩展名,我该怎么做?

我尝试了以下测试文件file1.txtfile2.txt

ren *.txt *1.1.txt

这会将文件重命名为file1.1.txtfile2.txt1.1.txt

我希望文件为file1 1.1.txtfile2 1.1.txt

这是否可以从cmd获得,或者我需要有一个bat文件来执行此操作吗? PowerShell怎么样?

10 个答案:

答案 0 :(得分:19)

确保?比最长名称中的字符多<{1}}:

ren *.txt "???????????????????????????? 1.1.txt"

有关详细信息,请参阅How does the Windows RENAME command interpret wildcards?

新解决方案 - 2014/12/01

对于那些喜欢正则表达式的人,有JREN.BAT - 一个混合的JScript /批处理命令行实用程序,可以在XP的任何版本的Windows上运行。

jren "^.*(?=\.)" "$& 1.1" /fm "*.txt"

jren "^(.*)(\.txt)$" "$1 1.1$2" /i

答案 1 :(得分:17)

for /f "delims=" %%i in ('dir /b /a-d *.txt') do ren "%%~i" "%%~ni 1.1%%~xi"

如果您使用不带for参数的简单/f循环,则已重命名的文件将再次重命名。

答案 2 :(得分:13)

第1步:

选择所有文件(ctrl + A)

第2步:

然后选择重命名选项

http://www.w3schools.com/cssref/css3_pr_column-count.asp

第3步:

选择您的文件名...例如: myfile

它会自动重命名为 myfile(01),myfile(02),.....

如果你想更换空间和括号..继续第4步

第4步:

从当前文件夹中打开Windows Powershell

http://jsfiddle.net/440d1f96/

第5步:

将空格替换为下划线(_)

 dir | rename-item -NewName {$_.name -replace [Regex]::Escape(" "),"_"}

第6步:

替换开放式支架

 dir | rename-item -NewName {$_.name -replace [Regex]::Escape("("),""}

替换关闭括号

 dir | rename-item -NewName {$_.name -replace [Regex]::Escape(")"),""}

答案 3 :(得分:10)

以下命令可以完成这项任务。

forfiles /M *.txt /C "cmd /c rename @file \"@fname 1.1.txt\""

来源:Rename file extensions in bulk

答案 4 :(得分:3)

@echo off
for %%f in (*.txt) do (
    ren "%%~nf%%~xf" "%%~nf 1.1%%~xf"
)

答案 5 :(得分:2)

试试这个Bulk Rename Utility效果很好。也许不会重新发明轮子。如果您不需要脚本,这是一个很好的方法。

答案 6 :(得分:1)

我尝试将Endoro的命令(Thanks Endoro)直接粘贴到命令提示符中,为文件添加前缀但遇到错误。解决方案是将%%减少到%,所以:

for /f "delims=" %i in ('dir /b /a-d *.*') do ren "%~i" "Service.Enviro.%~ni%~xi"

答案 7 :(得分:0)

我对此感到困惑......当你批量重命名时,不喜欢windows放入的括号。在我的研究中,我决定用PowerShell编写一个脚本。超级简单,工作就像一个魅力。现在我可以在需要批量处理文件重命名时使用它...这很常见。我拍摄了数百张照片,相机将它们命名为IMG1234.JPG等......

这是我写的脚本:

# filename: bulk_file_rename.ps1
# by: subcan
# PowerShell script to rename multiple files within a folder to a 
# name that increments without (#)
# create counter
$int = 1
# ask user for what they want
$regex = Read-Host "Regex for files you are looking for? ex. IMG*.JPG "
$file_name = Read-Host "What is new file name, without extension? ex. New Image "
$extension = Read-Host "What extension do you want? ex. .JPG "
# get a total count of the files that meet regex
$total = Get-ChildItem -Filter $regex | measure
# while loop to rename all files with new name
while ($int -le $total.Count)
{
    # diplay where in loop you are
    Write-Host "within while loop" $int  
    # create variable for concatinated new name - 
    # $int.ToString(000) ensures 3 digit number 001, 010, etc
    $new_name = $file_name + $int.ToString(000)+$extension
    # get the first occurance and rename
    Get-ChildItem -Filter $regex | select -First 1 | Rename-Item -NewName $new_name
    # display renamed file name
    Write-Host "Renamed to" $new_name
    # increment counter
    $int++
}

我希望这对那里的人有帮助。

subcan

答案 8 :(得分:0)

这适用于您的具体情况:

ren file?.txt "file? 1.1.txt" 

答案 9 :(得分:0)

我在Supperuser.com的一条小评论中发现了以下内容:

  

@ JacksOnF1re-我的答案中添加了新的信息/技术。您可以   实际上使用模糊的正斜杠删除前缀的副本   技巧:ren“ .txt的副本”“ ////////

How does the Windows RENAME command interpret wildcards?中,请参见answerdbenham

我的问题稍有不同,我想在文件中添加一个前缀,并从一开始就删除不需要的东西。就我而言,我有数百个枚举文件,例如:

SKMBT_C36019101512510_001.jpg
SKMBT_C36019101512510_002.jpg
SKMBT_C36019101512510_003.jpg
SKMBT_C36019101512510_004.jpg
:
:

现在我想分别将它们全部重命名为(相册07图片#):

A07_P001.jpg
A07_P002.jpg
A07_P003.jpg
A07_P004.jpg
:
:

我用一个命令行完成了它,并且就像魅力一样工作:

ren "SKMBT_C36019101512510_*.*" "/////////////////A06_P*.*"

注意:

  1. 用引号("代替"<Name Scheme>",否则不起作用,在我们的示例中:用"SKMBT_C36019101512510_*.*""/////////////////A06_P*.*"引出。
  2. 我必须精确计算要删除的字符数,并为新字符留出空间:A06_P实际上替换了2510_,而SKMBT_C3601910151被删除了,斜杠数/////////////////(17个字符)。
  3. 我建议您在应用上述文件之前先复制文件(进行备份)。