2014-07-17 151 views
-1

我正在尝试创建一个批处理脚本,它将用父文件夹名称和原始文件名称重命名所有子文件夹中的所有文档。例如:使用父文件夹/目录名称作为变量重命名文件

有200个具有唯一4位数名称的文件夹,所有文件夹都包含一个名为“数据表”的文件夹。我想重命名数据表文件夹中的所有文档以包含4位唯一的id名称。所以基本上我想要将文档从data sheet.doc重命名为1234数据表.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

向我们展示您尝试过的。 –

+0

请[编辑你的问题](https://stackoverflow.com/posts/24809805/edit)。不要将代码放在评论中,它是不可读的。 –

+1

不知道为什么有4票投票结束这个问题,引用“太宽泛”。看起来很特别。 –

回答

1

为了澄清 - 这将处理所有.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 
+0

当我从'echo ren'%% a“”%%〜nxc %% a''中删除echo并运行我得到的蝙蝠时“命令的语法不正确。” –

+0

立即尝试编辑的代码。 – foxidrive

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命令枚举所有的.doc文件放在当前文件夹和子文件夹中(\s开关)。 \b开关使得它使用bare格式(在这种情况下包括完整路径)输出文件名。 /a-d使它忽略目录,所以只有文件被重命名。

使用setlocal/endlocal可以使用延迟扩展变量,因此我们使用!而不是%set命令。延迟扩展确保变量在使用时被重新评估,而不是使用分配给它们的原始值。

echo ren ...使它向控制台回送重命名命令,而不是实际执行重命名。在真正运行它之前,您需要验证它是否输出了正确的重命名语句,并且在实际执行之前备份文件夹结构将是一个不错的主意,因为此类操作没有撤销

批处理文件删除前导路径,只保留子文件夹的名称,将其添加到文件名之前,还从新文件名中删除文件夹名称。

+0

James在运行时将所有.doc重命名为父文件夹子文件夹和文档名称。例如,文件夹结构是1234 \ Data Sheets \ Vehicle Info.doc。运行后,将Vehicle Info.doc重命名为“1234 Data Sheets Vehicle Info.doc”。我该如何去编辑你的代码,这样名称才会变成“1234 Vehicle Info.doc”,所以它会忽略所有的数据表文件夹名称? –

+0

您是否在我上次编辑之前获取了代码,这会从“new_fn”中删除“数据表”? –

+0

我必须有,这完美的作品。感谢您的帮助,非常感谢。最好的祝福! –

相关问题