批量将文件夹重命名为文件

时间:2014-06-19 15:40:44

标签: file batch-file directory rename dos

我有一个父文件夹,下面有很多文件夹(电影)。每个文件夹都有1个文件(实际的电影)。

我想在批处理脚本上提出一些建议,我可以运行该文件夹将文件夹重命名为文件(电影),但不包括扩展名(.avi)

e.g。

Parent (folder)
  Folder 1
    Movie 1.avi

  Folder 2
    Movie 2.avi

Parent (folder)
  Movie 1
    Movie 1.avi

  Movie 2
    Movie 2.avi

2 个答案:

答案 0 :(得分:0)

@ECHO OFF 
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN (
  'dir /b /ad "%sourcedir%\*" '
 ) DO (
  FOR %%b IN ("%sourcedir%\%%a\*") DO IF /i "%%~na" NEQ "%%~nb" ECHO(REN "%sourcedir%\%%a" "%%~nb"
)

GOTO :EOF

为了测试目的,所需的REN命令仅为ECHO在您确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。

您需要将目录设置为sourcedir。我设置了我的测试目录。

答案 1 :(得分:0)

以下批处理文件完成工作:

@echo off
if exist "%TEMP%\RenameFolders.bat" del "%TEMP%\RenameFolders.bat" >nul
cd /D "Complete\path\to\parent\folder"
for /R "Complete\path\to\parent\folder" %%I in (*.avi) do echo ren "%%~dpI" "%%~nI">>"%TEMP%\RenameFolders.bat"
if exist "%TEMP%\RenameFolders.bat" (
   call "%TEMP%\RenameFolders.bat"
   del "%TEMP%\RenameFolders.bat" >nul
)

“完成\ path \ to \ parent \ folder”必须在批处理文件中按实际父文件夹路径修改两次。

主要工作由命令FOR完成。在命令提示符窗口for /?中运行以获取有关选项

的信息
  • /R ...递归文件夹/文件扫描,
  • %%~dpI ...文件的驱动器和路径,以及
  • %%~nI ...没有路径和文件扩展名的文件名。

对于每个* .avi文件,执行命令echo以创建稍后用于将包含* .avi文件的文件夹重命名为* .avi文件名称的重命名命令。

无法直接在FOR循环内重命名文件夹,因为当文件夹是正在运行的进程的当前工作目录时,无法重命名该文件夹。 <{1}}正在运行时,每个文件夹都是批处理的当前工作目录。

第三行中的命令FOR只是确保将工作目录设置为要重命名的所有子文件夹的父文件夹,以避免重命名文件夹失败,因为批处理文件是从其中一个子文件夹启动的。

第二行只是确保临时文件的文件夹中没有文件CD,例如在命令{{1}时单击 X 按钮终止此批处理文件一次}目前正在运行。

在递归处理命令RenameFolders.bat之后,所有* .avi文件和一个带有命令FOR的行被附加到文件FOR以获取每个文件,这个创建的批处理文件被调用,现在重命名为文件夹。

最后临时创建的批处理文件将被删除,因为不再需要了。