在批处理文件中使用目录名更改文件名

Changing file name with its directory name in a batch file

我试图根据目录名递归更改一些文件名,但我失败了。这是我到目前为止所做的:

for /r %1 %%Z in (*.c) do (
    echo ====
    rem Change to the directory of .c file
    echo cd /d "%%~dpZ"
    cd /d "%%~dpZ"
    rem Change the file's name with its directory name with .c extension        
    ren %%~nxZ %cd%.c
)

这是目录结构:

SubDir
    renamer.bat
    sub1
         file1.c
    sub2
         file2.c
   so on
         so forth

所有其他帖子都说使用 %cd% returns 当前目录的名称,但是它 returns 类似于:c:\users\myusername\desktop\SubDir,意思是 returns 批处理文件的目录名称。但是,如您所见,我在批处理文件中使用了 cd 命令,因此我希望它仅 returns sub1sub2, 等等...因此,我可以将文件名更改为它们的目录名:

ren file1.c sub1.c

提前致谢。

编辑: 回答

setlocal EnableDelayedExpansion
for /r %1 %%Z in (*.c) do (
    echo ====
    rem Change to the directory of .c file
    echo cd /d "%%~dpZ"
    cd /d "%%~dpZ"
    rem Change the file's name with its directory name with .c extension  
    FOR /f "delims=" %%a IN ("%%~dpZ\.") DO (ren %%~nxZ %%~nxa.c)
)

在这种情况下,您应该使用延迟扩展。你应该使用这个:

setlocal EnableDelayedExpansion
for /r %1 %%Z in (*.c) do (
    echo ====
    rem Change to the directory of .c file
    echo cd /d "%%~dpZ"
    cd /d "%%~dpZ"
    rem Change the file's name with its directory name with .c extension  
    for /f "delims=" %%A in ("!CD!") do ren "%%~nxZ" "%%~nxA.c"
)

有关延迟扩展的详细信息,请参阅this

 FOR /f "delims=" %%a IN ("%%~dpZ\.") DO ECHO(ren %%~nxZ %%~nxa-%%~nxZ

echo新名字....