缩短Windows中的文件路径结构

问题描述 投票:0回答:1

我的文件夹内有一个文件结构,名称非常大。 这些文件夹具有以下结构:“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
batch-file batch-rename
1个回答
0
投票
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
)文档提名仅限字母字符。有些符号似乎有效,但没有记录。

© www.soinside.com 2019 - 2024. All rights reserved.