我对 Dos 还不是很了解,我正在尝试编写一个脚本(是的)
我想要做的是:
- 取批处理所在文件夹的名称(例如:.\Project_Apple*.bat)
- 使用第一个文件的名称重命名子文件夹中的文件
(例如:\Project_Apple\OUTPUT\template.txt
>\Project_Apple\OUTPUT\Project_Apple.txt
)
对于重命名和定位,我没有问题。我使用 CD 和 REN。我读到 FOR 命令可以做到这一点,并阅读了有关它的文档,但我不知道如何让它“记住”文件夹名称。
有办法吗?
编辑:
我迈出了一大步。我使用以下方法成功将文件夹和文件重命名为文件夹名称:
for %%i in (%cd%) do set CurrDirName=%%~nxi
rename test.txt %CurrDirName%
现在,我正尝试定位子文件夹中的文件。
答案1
我已经通过这个实现了我想要做的事情。
for %%i in (%cd%) do set CurrDirName=%%~nxi
cd %CurrDir%\OUTPUT\
rename template.txt %CurrDirName%.txt
答案2
不要使用%CD%
这个,它不一定是批次所在的文件夹。
:: Q:\Test\2019\01\24\SU_1397868.cmd
@Echo off
Echo This batch file full path: %~f0
Echo This batch file drive : %~d0
Echo This batch file path : %~p0
Echo This batch file name : %~n0
for %%A in (%0\..) Do Set folder=%%~nxA
Echo This batch file folder : %folder%
If exist "%~dp0Output\template.txt" (
Ren "%~dp0Output\template.txt" "%folder%.txt"
)
我的 RAM 驱动器 A 上的示例输出:
> SU_1397868.cmd
This batch file full path: A:\Project_Apple\SU_1397868.cmd
This batch file drive : A:
This batch file path : \Project_Apple\
This batch file name : SU_1397868
This batch file folder : Project_Apple
> tree /F A:\
A:\
└───Project_Apple
│ SU_1397868.cmd
│
└───OUTPUT
Project_Apple.txt