将具有文件夹名称中的前缀和时间戳的多个文件夹组合到仅具有前缀的新文件夹中

时间:2017-04-19 20:05:10

标签: batch-file

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

我在我工作的医院有一个庞大的研究项目,我正在使用的数据是一个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\* 
    )
)

1 个答案:

答案 0 :(得分:0)

以下是更正的脚本:

@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命令的源路径和目标路径;
  • 所有路径均已正确引用;