使用批处理文件将父目录名称作为前缀添加到子目录文件

时间:2014-01-03 23:17:57

标签: windows batch-file prefix

使用批处理文件

将父目录名称作为前缀添加到子目录文件中

我需要将父目录的前缀添加到子目录中的所有文件

例如,我们在Directories 101中接收html和文本文件作为父目录,将Creatives作为子目录接收

F:\Files\101\Creatives\filename.htm and filename.txt
F:\Files\102\Creatives\filename.htm and filename.txt
F:\Files\103\Creatives\filename.htm and filename.txt

这里我想省略子目录名称(Creatives)并添加101_,102_,103_作为子目录中存在的文件名的前缀

示例101_filename.htm也将文本文件作为子文件夹中的101_filename.txt

使用下面的代码我可以在子文件夹文件中添加前缀,但我只能用静态值(Prefix_)替换它,这里我需要添加第一个目录名称(101,102等)作为前缀(F:\ Files)文件夹中的所有文件

@echo off
pushd "F:\Files"
for /r %%j in (*) do (
   rename "%%j" "Prefix_%%~nxj"
)
popd

3 个答案:

答案 0 :(得分:1)

@echo off
pushd "F:\Files"
for /d %%P in (*) do for /f "delims=" %%F in ('dir /b /s /a-d "%%P"') do rename "%%F" "%%P_%%~nxF"
popd

内部循环是FOR / F,带有DIR命令而不是FOR / R,以消除循环重命名同一文件两次的可能性。

答案 1 :(得分:0)

我猜你可以找到一个涉及2 for循环的解决方案。 像

这样的东西
for /f "tokens=*" %%d in ('dir /b') do ( for /f "tokens=*" %%f in ('dir /s /b %%d') do ( rename "%%f" "%%d_%%~nxf" ) )

最诚挚的问候,

米歇尔。

答案 2 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "source=u:\Files"
pushd "%source%"
for /r %%j in (*) do (
   SET "prefix=%%~dpj"
   CALL :setpfx
   ECHO rename "%%j" "!Prefix!_%%~nxj"
)
popd
GOTO :EOF

:setpfx
SET prefix=!prefix:*%source%=!
SET prefix=%prefix:\=.%
FOR /f %%t IN ("%prefix%") DO SET prefix=%%~nt
SET prefix=%prefix:.=_%
SET "prefix=%prefix:~1%"
GOTO :eof

这可能会满足您的需求。所需命令仅用于ECHO以用于测试目的。在您确认命令正确无误后,将ECHO RENAME更改为REN以实际重命名文件。