如何使用Windows批处理编程来重命名与该文件夹内第一个文件的文件名相同的文件夹?

我有一组约3000个名为XYZ-1到XYZ-3000的文件夹。 这些文件夹内部是一组图像文件和一个描述文本文件。 如:

  • Property123_0001.jpg
  • Property123_0002.jpg
  • Property123_0003.jpg
  • Property123_0085.jpg
  • Property123_0086.jpg
  • Z_Description.txt

.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。 我试着在最后放一个暂停命令,但是没有打开窗口。 文件/文件夹没有任何反应。

我试过从命令行我的语法,一切都看起来不错。 所以我不知道问题是什么 我可以得到一些帮助吗?

Solutions Collecting From Web of "如何使用Windows批处理编程来重命名与该文件夹内第一个文件的文件名相同的文件夹?"

尝试这个:

 @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! )