我有一组约3000个名为XYZ-1到XYZ-3000的文件夹。 这些文件夹内部是一组图像文件和一个描述文本文件。 如:
.jpg
文件的数量在每个文件夹中都不相同,但总是有一个描述文件。 每个目录的图像文件都有不同的名称,例如`XYZ-1可能包含Property123,而XYZ-10可能包含Easement789。
我需要在.jpg文件的“Property123”部分之后重命名包含文件的文件夹。 理想情况下,我会截断尾数字和下划线,但即使留下,也会比XYZ-1更好。
我正在处理一个batch file,但是我的文件不能运行,我不知道为什么。
这是我有:
for /d %%D in (*) do ( set "_dir=%%D" set /a "_first=1" cd "%%D" for %%F in (*) do ( if %_first%==1 set "_name=%%~nF" set /a "_first=0" ) cd .. ren %_dir% %_name% )
不幸的是,当我运行它时,命令窗口立即closures。 我试着在最后放一个暂停命令,但是没有打开窗口。 文件/文件夹没有任何反应。
我试过从命令行我的语法,一切都看起来不错。 所以我不知道问题是什么 我可以得到一些帮助吗?
尝试这个:
@echo off setlocal EnableDelayedExpansion for /d %%D in (*) do ( set "_dir=%%D" set "_name=%%D" set /a "_first=1" cd "%%D" for %%F in (*) do ( if !_first!==1 set "_name=%%~nF" set /a "_first=0" ) cd .. ren !_dir! !_name! )
你需要在这里使用setlocal EnableDelayedExpansion,并使用! 而不是循环内的%。
我还添加了设置“_name = %% D”,所以它不会尝试将第二个文件夹更改为第一个文件夹的名称,如果该文件夹不包含文件
编辑:
还考虑到了下划线部分:
@echo off setlocal EnableDelayedExpansion for /d %%D in (*) do ( set "_dir=%%D" set "_name=%%D" set /a "_first=1" cd "%%D" for %%F in (*) do ( if !_first!==1 ( set "_name=%%~nF" set /a "_first=0" if NOT "!_name!"=="!_name:_=!" ( set "subfix=!_name:*_=!" for /f "delims=" %%B in ("!subfix!") do set "_name=!_name:_%%B=!" ) ) ) cd .. ren !_dir! !_name! )