【问题标题】:Batch rename folders to files批量重命名文件夹为文件
【发布时间】:2014-06-19 15:40:43
【问题描述】:
我有一个父文件夹,下面有很多文件夹(电影)。每个文件夹有 1 个文件(实际电影)。
我想要一些关于批处理脚本的建议,我可以运行该脚本将文件夹重命名为不包括扩展名 (.avi) 的文件(电影)
例如
之前
Parent (folder)
Folder 1
Movie 1.avi
Folder 2
Movie 2.avi
之后
Parent (folder)
Movie 1
Movie 1.avi
Movie 2
Movie 2.avi
【问题讨论】:
标签:
file
batch-file
directory
rename
dos
【解决方案1】:
@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 命令仅用于测试目的ECHOed。 验证命令正确后,将 ECHO(REN 更改为 REN 以实际重命名文件。
您需要将您的目录设置为sourcedir。我设置了我的测试目录。
【解决方案2】:
以下批处理文件可以完成这项工作:
@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
)
"Complete\path\to\parent\folder"必须在批处理文件中通过真实父文件夹路径修改两次。
主要工作由命令FOR 完成。在命令提示符窗口中运行for /? 以获取有关选项的信息
-
/R ...递归文件夹/文件扫描,以及
-
%%~dpI ...文件的驱动器和路径,以及
-
%%~nI ... 没有路径和文件扩展名的文件名。
对于每个 *.avi 文件,执行命令 echo 以创建重命名命令,稍后用于将包含 *.avi 文件的文件夹重命名为 *.avi 文件的名称。
无法在FOR 循环内直接重命名文件夹,因为当文件夹是正在运行的进程的当前工作目录时,无法重命名该文件夹。当FOR 正在运行时,每个文件夹都是批处理的当前工作目录。
第三行中的命令CD 只是确保将工作目录设置为要重命名的所有子文件夹的父文件夹,以避免重命名文件夹失败,因为批处理文件是从其中一个子文件夹启动的。
第二行只是确保临时文件的文件夹中没有文件RenameFolders.bat,例如,当命令FOR 当前正在运行时,单击按钮X 终止此批处理文件一次.
在命令 FOR 递归处理所有 *.avi 文件并将带有命令 ren 的行附加到每个文件的文件 RenameFolders.bat 之后,这个创建的批处理文件被称为现在重命名文件夹。
最后临时创建的批处理文件不再需要删除。