我正在尝试创建一个批处理脚本,该脚本将使用父文件夹名称重命名所有子文件夹中的所有文档,然后重命名原始文件名。例如:
有200个具有唯一4位数字名称的文件夹,所有文件夹都包含一个名为"数据表"的文件夹。我想重命名Data Sheets文件夹中的所有文档以包含4位唯一ID名称。基本上我希望将文档从data sheet.doc重命名为1234 data sheet.doc
有很多批处理脚本可以做一些非常接近我想做的事情,但我无法修改它们来完全按照我的需要做。任何帮助,将不胜感激。这就是我尝试使用类似版本试图让它工作的原因。
@echo off
for /r %%a in ("S:\Fiscal Yr. 2015\*\*.doc") do (
for /d %%d in (%CD%) do (
set newname=%%~nd%~x1
ren "%%~a" "!newname!%%~Xa"
echo media file in %%~fa renamed to "!newname!%%~Xa"
)
)
扎克
答案 0 :(得分:1)
澄清一下 - 这将处理名为" Data Sheets"的任何文件夹中的每个.doc
文件。并重命名文件以将the parent folder-name to "Data Sheets"
添加到.doc
文件的开头。
在删除第一个echo
语句之前,这将回显重命名命令以确认它是否正确。
@echo off
for /r "S:\Fiscal Yr. 2015" %%a in (*.doc) do (
for /f "delims=" %%b in ("%%~pa\.") do (
if /i "%%~nxb"=="Data Sheets" for /f "delims=" %%c in ("%%~pb\.") do (
echo ren "%%a" "%%~nxc %%~nxa"
echo media file "%%a" renamed to "%%~nxc %%~nxa"
)
)
)
pause
答案 1 :(得分:0)
这是一个简单的例子,说明如何重命名整个文件夹结构中的所有文件,包括所有子文件夹:
@echo off
setlocal ENABLEDELAYEDEXPANSION
cd /d "S:\Fiscal Yr. 2015"
set _cd=%CD%
for /f "delims=" %%i in ('dir *.doc /a-d /s /b') do (
set old_fn=%%~fni
set new_fn=!old_fn:%_cd%\=!
set new_fn=!new_fn:Data Sheets\=!
set new_fn=!new_fn:\= !
echo ren "!old_fn!" "!new_fn!"
)
endlocal
for
命令枚举当前文件夹和子文件夹(\s
开关)中的所有.doc文件。 \b
开关使用bare
格式输出文件名(在这种情况下包括完整路径)。 /a-d
使其忽略目录,因此只重命名文件。
使用setlocal / endlocal
可以使用延迟扩展变量,因此我们使用!
代替%
set
命令。延迟扩展可确保在使用变量时重新评估变量,而不是使用分配给它们的原始值。
echo ren ...
使重命名命令回显到控制台而不是实际执行重命名。在您真正运行它之前,您需要验证它是否输出了正确的重命名语句,并且在您实际执行之前备份文件夹结构是个好主意,因为没有撤消对于这种类型的操作。
批处理文件删除了前导路径,只保留子文件夹的名称,在文件名之前添加它,同时从新文件名中删除数据表文件夹名称。