如何在Windows中一次重命名80.000个文件


8

我在一个文件夹中有80.000个文件,我需要从中重命名所有文件

filename.jpg

._filename.jpg

在Windows环境中,我想从dos。原因是我已将这些文件从unix压缩到tar.gz中并复制到Windows中,并且由于某种原因文件名已更改。

你能告诉我执行的命令是什么吗?谢谢

Answers:


3

您可以使用内置renameren命令:

ren *.jpg ._*.jpg

但是,与所有其他操作一样,请首先在仅包含几个文件的目录上进行尝试。


1
我喜欢您的方法,但是有两个问题:(1)替换文件名的前几个字母。换句话说,“ ._”开头不会添加,但是会替换前两个字母。(2)“ ._”实际上不起作用。如果我使用例如“ __”,那么它可以工作。我认为圆点是“。” 给出了一些问题
aneuryzm 2011年

@Patrick-我必须承认我没有机会对此进行全面测试,是的,我认为您对造成问题的点是正确的。
ChrisF 2011年

这是不正确的,不是因为有点。ren只能用相同长度的文本替换文本。例如,如果您有文件file1.txtfile2.txtren file*.txt blah*.txt则按预期执行操作(现在您有文件blah1.txtblah2.txt)。但是,如果您随后键入ren blah*.txt myfile*.txt命令,则会炸掉该命令,因为它已重命名blah1.txtmyfile.txt(not myfile1.txt),然后由于该文件已存在而无法重命名blah2.txtmyfile.txt
David Richerby 2014年

15

这是使用PowerShell的一种方法:

导航到您的文件夹并运行此命令

Get-ChildItem *.jpg | Rename-Item -newname {"._" + $_.Name}

额外奖金简短版:

gci *.jpg | ren -newname {"._" + $_.Name}

6

我有2个解决方案:

  1. 所有文件都在同一个文件夹中

    • 在该文件夹的命令提示符处运行以下命令:

      for /f "delims=¯" %i in ('dir /b /on') do ren "%i" "._%i"
      
  2. 当子文件夹中有文件并且您想用所需的字符串替换“ n”个前几个字符时,一个完整的解决方案:D

    • 使用以下命令创建批处理文件
    • 将变量参数更改为所需的参数
      • path:放入""文件的根路径(例如“ C:\ documents and settings \ user \ desktop \ new文件夹”
      • numfirstchars2replace:将数字替换为第一个字符(在您的情况下为2)
      • str2put:放置一个字符串作为新文件名的前缀(在您的情况下为._
    • 在不同于文件所在的文件夹中运行它


@echo off

::only to tell user what this bat are doing
echo.1.initializing...

::enable that thing to allow, for example, incremental counter in a for loop :)
echo.- EnableDelayedExpansion
SETLOCAL EnableDelayedExpansion

::variables
echo.- variables
:: - place here the absolute root path of your files
set path="put here where are the root folder of your files"
set pathbak=%cd%
set numfirstchars2replace=2
set str2put=._

::go to %path% and its driveletter
echo.- entering the path you want
for /f "delims=¯" %%i in ('echo.%path%') do %%~di
cd %path%

::search all subfolders and save them to a temp file
echo.- searching for subfolders
echo.%path%>%temp%\tmpvar.txt
for /f "delims=¯" %%i in ('dir /s /b /on /ad') do echo."%%i">>%temp%\tmpvar.txt

::execute command for root folder and all found subfolders
echo.
echo.2.executing...
for /f "delims=¯" %%i in (%temp%\tmpvar.txt) do (
  cd %%i
  echo.- in folder: %%i
  for /f "delims=¯" %%j in ('dir /b /on /a-d') do (
    set newname=%%j
    set newname=!newname:~%numfirstchars2replace%,1000!
    echo.- renaming from "%%j" to "%str2put%!newname!"...
    ren "%%j" "%str2put%!newname!"
  )
)

echo.
echo.3.exiting...
::return to %pathbak% and its driveletter
for /f "delims=¯" %%i in ('echo.%pathbak%') do %%~di
cd %pathbak%

@echo on

经过充分测试的:)它可以解决您的问题,包括您在@ChrisF注释中提供的一些规范。注意:在“ delims =¯”中,如果在文件名中使用“¯”,则将“¯”更改为文件名中未使用的另一个字符
kokbira 2011年

由于您难以置信的冗长脚本而决定投票,只是做一个循环并重命名某事。:)
wullxz 2011年

好吧,我可以对所有文件按名称排序进行“ for / f”循环,然后将它们重命名为“ ._lenameX.jpg”(以X为订单号),但是我认为在其他情况下可以做到这一点-如果将来出现类似的问题,则有人可以修改一些命令...
kokbira 2011年

您可以使用“ delims =”代替“ delims =¯”(我忘记了:D)。您也可以使用/ f indead for / f“ delims =”,因为它
可以满足

3

如果它们都在同一文件夹中,则可以使用Control+ 选择它们A,然后单击F2以重命名它们之一。所有后续文件将被命名为file(2),file(3)等


3

尝试Powershell(已预装在Windows 7中):

Get-Childitem /path/to/your/files | foreach-object { move-item $_ $("._" + $_.name) }

(在我的下载目录中对其进行了测试。)

编辑:Siim K的代码将在每个“ ._filename.jpg”后面附加一个“ .jpg”。删除Siim K代码中的最后一个“ .jpg”,即可使用简短而优雅的代码来重命名文件。


谢谢,更新。来自类似重命名命令的重用代码,该命令需要扩展名操作并且没有引起注意。
Siim K


0

我一直发现Flash Renamer是批量重命名文件的好工具。

它具有试用版和完整版(20美元),并且可以基于元数据重命名文件-对于重命名MP3文件(这是我主要用的文件)非常有用。


0

如果您正在寻找一种用户友好的批量重命名方法,可以尝试使用免费工具Ant Renamer,您可以执行大量操作,并且在进行任何重命名之前还可以方便地进行预览。在弄乱我的音乐,照片或视频库时,我经常使用它。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.