在批处理文件中使用目录名更改文件名
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 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)
)
在这种情况下,您应该使用延迟扩展。你应该使用这个:
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
新名字....
我试图根据目录名递归更改一些文件名,但我失败了。这是我到目前为止所做的:
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 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)
)
在这种情况下,您应该使用延迟扩展。你应该使用这个:
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
新名字....