在批处理文件中更改文件名及其目录名

时间:2016-03-21 20:53:44

标签: windows batch-file file-rename batch-rename

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

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%返回当前目录的名称,但它会返回类似的内容:c:\users\myusername\desktop\SubDir,表示它返回批处理文件的目录名称。但是,如您所见,我在批处理文件中使用cd命令,因此我希望它只返回 <{strong> 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)
)

2 个答案:

答案 0 :(得分:2)

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

echo新名称......

答案 1 :(得分:0)

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

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