我的文件夹内有一个文件结构,名称非常大。 这些文件夹具有以下结构:“C:\images\Calc-Test_P_00038_LEFT_CC 8-29-2017-DDSM-NA-96009 ooP00image”,此文件夹内有一个 .dcm 文件。 此结构内有 600 个文件,每个文件位于其中一个文件夹中,并且这些文件有时具有相同的名称 (file.dcm)。 我需要重命名整个文件夹结构以缩短名称,例如“C:\images ile.dcm”、“C:\images ile.dcm”等,这样我就可以上传整个结构到我将处理这些图像的存储库。 我尝试过这个bat脚本没有成功,因为我无法在这台计算机上使用python。 欢迎对代码或任何替代方案提供任何帮助。
@echo off
setlocal enabledelayedexpansion
set "root_dir=C:\images"
set /A counter=1
for /f "delims=" %%D in ('dir "%root_dir%" /ad /b /s /o-n') do (
set "folder_path=%%D"
set "folder_name=%%~nxD"
set "contains_dcm_file=0"
for %%F in ("%%D\*.dcm") do (
set "contains_dcm_file=1"
goto :skip_renaming
)
set "parent_path=%%~dpD"
set "new_name=!counter!"
if not "!folder_name!"=="!new_name!" (
ren "!folder_path!" "!new_name!"
)
set /A counter+=1
:skip_renaming
)
echo Done.
pause
for /f "delims=" %%D in ('dir "%root_dir%" /ad /b /s /o-n') do (
set "folder_path=%%D"
set "folder_name=%%~nxD"
SET "contains_dcm_file="
for %%F in ("%%D\*.dcm") do (
set "contains_dcm_file=1"
)
IF NOT DEFINED contains_dcm_file (
set "parent_path=%%~dpD"
set "new_name=!counter!"
if not "!folder_name!"=="!new_name!" (
ren "!folder_path!" "!new_name!"
)
)
set /A counter+=1
)
变化:
contains_dcm_file
现在是布尔值 - 请参阅使用布尔值
contains_dcm_file
在每个循环中初始化为 nothing,然后在找到 .dcm
文件时设置为 something。
然后测试是否定义了
contains_dcm_file
,即找到了.dcm
文件,如果没有则执行操作。
我还没有测试过这个,所以我依靠你的原始代码来做你想做的事情。
为了测试,我会使用
ECHO ren
进行验证,而不是执行不需要的重命名。只需在测试后删除echo
即可激活重命名。
我更喜欢避免将 ADFNPSTXZ (在任何一种情况下)作为元变量(循环控制变量),因为 ADFNPSTXZ 也是元变量修饰符,这可能会导致难以发现的错误(请参阅文档提示中的
for/f
)文档提名仅限字母字符。有些符号似乎有效,但没有记录。