我试图根据目录名递归更改一些文件名,但我失败了。以下是我到目前为止所做的事情:
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> sub1
,sub2
等...因此,我可以将文件名更改为其目录的名称:
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)
)
答案 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