【问题标题】:Combining Multiple Folders with prefix and timestamp in folder name into new folder with just prefix将文件夹名称中带有前缀和时间戳的多个文件夹组合到仅带有前缀的新文件夹中
【发布时间】:2017-09-16 05:42:25
【问题描述】:

所以,这对我来说是一个特别令人费解的问题。我愿意使用任何我必须使用的东西,但我通常只编写简单的批处理文件。

我在我工作的医院有一个庞大的研究项目,我正在处理的数据以 4 位数的主题标识符和时间戳呈现给我,如下例所示:

6443_20170419_141200416
6443_20170419_141200447
6443_20170419_141200500
6476_20170419_141200537
6476_20170419_141201112
等等

我实际上有数千个这样的文件夹,每个文件夹中都有 1 到 3 个文件名很长的文件 - 唯一的共同点是 .DCM 扩展名。

我想做的是有一个脚本,它将提取文件夹名称的前 4 个字符,使用该 4 个字符的名称创建一个新目录,然后将文件夹中具有匹配前缀的所有文件复制到新创建的文件夹。

例如,假设所有以 6443 开头的文件夹中有多个 .DCM 文件。我想创建一个名为 6443 的新文件夹(在与当前目录不同的位置,以避免意外删除),然后将每个目录中的所有 .DCM 文件移动到新文件夹中。

我有一个 .TXT 文件,其中包含我一直用于各种其他脚本任务的所有主题 ID #,使用 FOR /F 遍历此文件,如果这让任何人有解决方案的想法。

这一次真是让我头疼。救命!!!

----- 附加信息 ----- 我一直在进步,但还是不对。我正在使用如下所示的脚本,但它将每个文件夹中的所有文件移动到每个新创建的文件夹中,而不是按 4 位前缀对它们进行排序。

@ECHO on
cls

FOR /f "delims=_" %%a IN ('dir /b /ad "*_*_*"') DO (
    if not exist %%a MD .\combined\%%a
    FOR /d /r %%d IN ("*") DO (
    copy %%d\* .\combined\%%a\* 
    )
)

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    这是更正后的脚本:

    @echo on
    cls
    
    for /F "tokens=1* delims=_" %%a in ('dir /B /A:D "????_*"') do (
        if not exist ".\combined\%%a\" md ".\combined\%%a"
        copy ".\%%a_%%b\*.dcm" ".\combined\%%a"
    )
    

    我改变了什么:

    • tokens 选项已添加到外部 for /F 循环中,以便以后能够重建原始源目录名称;
    • 改进了目录搜索模式;
    • if 查询检查了错误的目录;
    • 内部 for 循环已被移除,因为它再次遍历所有源目录;
    • copy 命令的源路径和目标路径已调整;
    • 正确引用所有路径;

    【讨论】:

    • 谢谢 - 不知道 :) 再问你一个问题 - 你能告诉我一些关于 %%b 的含义以及它是如何工作的吗?我正在添加您给我的代码,以通过 2 个字母前缀进一步隔离组合文件,并在复制它们时重命名它们......但它无法正常工作。
    • 看看for /F——你会发现像%%a%%b这样的引用是什么意思。 ? 是代表单个字符的通配符——参见dir。您当然可以就您的新问题提出新问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多