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



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

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

例如,我们接收目录 101 中的 HTML 和文本文件作为父目录,将创意作为子目录

F:Files101Creativesfilename.htm and filename.txt
F:Files102Creativesfilename.htm and filename.txt
F:Files103Creativesfilename.htm and filename.txt

在这里我想省略子目录名称(创意),并将 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
@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

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

我想

你可以找到一个涉及 2 for 循环的解决方案。类似的东西

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

此致敬意

米歇尔。

@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以实际重命名文件。

最新更新