如何在子文件夹中批量重命名文件 - 使用CMD命令提示符

问题描述:

我对命令提示符(Windows)很新颖,但是我已经使用它来完成一些文件扩展名更改,这非常有用。我在编码方面一无所知,所以我只是简单地将我所读过的内容展开,但我正在寻找一种我无法在任何地方找到的命令行。我有文件夹,并在该文件夹内有70个子文件夹,每个文件夹都用1-70的数字标记。这些子文件夹内大约有20个PNG图片文件,目前编号为1到20个PNG格式。我正在寻找一个命令行来重命名每个文件从它的原始名称到“文件夹名称(页码).png”如何在子文件夹中批量重命名文件 - 使用CMD命令提示符

例如,我有一个名为'68'的文件夹,该文件夹内部是1.png,2 .png,3.png。我希望命令行将1.png和2.png等改为68(1).png和68(2)。 png,注意括号和文件夹名称之间的空格。对不起,如果我让它感到困惑,但我真的很感激它,我已经从*得到了一些非常有帮助和快速的答案

谢谢,如果你能帮助我,因为我完全无望在这件事上。

+0

我不确定你是否可以用一个命令做到这一点,但你可以编写一个脚本来打开文件夹,然后'mv'你的PNG文件。但是,这将是bash脚本,它不是一个单一的命令,你问。 – mrz 2013-04-27 05:53:27

我不是一个非常有经验的bash scriptor,但我想这应该为你做任务。我假设你正在使用Linux操作系统。因此,打开一个文本编辑器,复制以下:

#!/bin/bash 

NumberOfFolders=70 

for((a=1; a <= NumberOfFolders ; a++)) 
do 
     cd ./$a 
     b=1 
     while [ -f $b.png ] 
     do 
       mv "$b.png" "$a($b).png" 
       let b=b+1 
     done 
     cd .. 
done 

保存这个脚本,你必须在文件夹1-70(并调用它whatever.ssh)。然后打开一个终端,然后写下chmod a+x whatever.ssh然后./whatever.ssh。这应该可以完成您在问题中提出的工作。

+0

没有抱歉的@MRZ我正在使用Windows 7 - 我正在寻找命令行的Windows命令提示符(CMD) – 2013-04-27 06:36:57

+0

oooppss,我的坏。 – mrz 2013-04-27 08:38:07

只运行一次 - 从包含70个文件夹的文件夹启动它。

@echo off 
for /f "delims=" %%a in ('dir /ad /b') do (
pushd "%%a" 
for /f "delims=" %%b in ('dir /a-d /b') do ren "%%b" "%%a (%%~nb)%%~xb" 
popd 
) 
+0

对不起,听起来像这样的am,但我很难找出这些代码如何工作。如果没有听起来太懒,如果可能的话,什么是理想的命令行,我可以直接复制到命令提示符下,而不必在可能的情况下执行多个进程。此外,最好能够指定文件路径而不必更改目录将是理想的。对不起,没有经验的声音,但我似乎无法理解任何语言或处理器,只是寻找一个简单的命令行,我指定的文件路径和多数民众赞成它。 – 2013-07-04 07:49:33

的方法@foxidrive稍加改进建议,使脚本可以在任何地方运行,而不必解析dir输出:

@echo off 
for /r "C:\root\folder" %%d in (.) do (
    pushd "%%~fd" 
    for %%f in (*) do ren "%%~ff" "%%~nd (%%~nf)%%~xf" 
    popd 
) 

注意,这将不会在Windows XP中工作(不知道Windows Vista),这是由于内部for循环中*的扩展错误导致文件被重命名多次。

+0

这是有缺陷的,因为在执行命令时存在长期存在的错误,当它更改正在处理的filespec时,它将处理两次文件。 – foxidrive 2013-04-27 13:36:18

+0

请为此声明提供证据。当我测试它时,代码没有重命名两次。 – 2013-04-27 15:28:11

+0

一些进一步的调查显示,这是Windows XP中的一个错误,但显然它已在Windows 7中修复。 – 2013-04-27 15:50:55