我正在使用 -
for /d /r %%a in (*) do (
del "%%~fa\COMBINED_NAD.TXT" >nul 2>nul
copy /b "%%~fa\*NAD.TXT" "%%~fa\COMBINED_NAD.TMP"
ren "%%~fa\COMBINED_NAD.TMP" "COMBINED_NAD.TXT"
)
哪个很好用,但我还需要它在目录文件夹名称中包含目录文件夹名称 - 例如我希望输出类似于 - “%DIR%_COMBINED_NAD.TXT
”。
有谁知道我需要添加什么?谢谢你的帮助。
答案 0 :(得分:1)
根据您想要的输出,有几种可能的解决方案。
如果该程序在C:\Users\Example\Documents\
中运行,并且位于C:\Users\Example\Documents\Example\Something\
文件夹中,则结果为Example_Something_COMBINED_NAD.TXT
。
setlocal enabledelayedexpansion
for /d /r %%a in (*) do (
del "%%~fa\COMBINED_NAD.TXT" >nul 2>nul
copy /b "%%~fa\*NAD.TXT" "%%~fa\COMBINED_NAD.TMP"
set dir=%%~fa
set dir=!dir:%cd%\=!
set dir=!dir:\=_!
ren "%%~fa\COMBINED_NAD.TMP" "!dir!_COMBINED_NAD.TXT"
)
这里重要的是:
set dir=%%~fa
set dir=!dir:%cd%\=!
set dir=!dir:\=_!
第一行将dir
设置为%%~fa
,这是当前正在处理的文件夹
第二行替换%cd%
内
(启动程序的目录)的值dir
(空白)的所有出现。
第三行用下划线替换所有斜杠。 (文件名不能包含斜杠)
请注意,这使用!varname!
而不是%varname%
。 set
的帮助中对此进行了解释,这就是为什么需要setlocal enabledelayedexpansion
。
如果该程序在C:\Users\Example\Documents\
中运行,并且位于C:\Users\Example\Documents\Example\Something\
文件夹中,则结果为Users_Example_Documents_Example_Something_COMBINED_NAD.TXT
。
setlocal enabledelayedexpansion
for /d /r %%a in (*) do (
del "%%~fa\COMBINED_NAD.TXT" >nul 2>nul
copy /b "%%~fa\*NAD.TXT" "%%~fa\COMBINED_NAD.TMP"
set dir=%%~pa
set dir=!dir:\=_!
set dir=!dir:~1!
ren "%%~fa\COMBINED_NAD.TMP" "!dir!_COMBINED_NAD.TXT"
)
这里重要的是:
set dir=%%~pa
set dir=!dir:\=_!
set dir=!dir:~1!
它与第一个非常相似,但已经做了一些改动。
第一行将dir
设置为文件夹,但不设置驱动器号
第二行用下划线替换斜杠(与上面相同的原因)
第三行将dir设置为1 char为dir。这是必需的,否则它将以前导下划线输出。
如果程序在Something_COMBINED_NAD.TXT
中运行,并且位于C:\Users\Example\Documents\
文件夹中,我不知道产生C:\Users\Example\Documents\Example\Something\
的解决方案。