2017-04-19 44 views
1

所以,这对我来说是一个特别令人费解的问题。我愿意使用我必须做的任何事情,但我通常只写简单的批处理文件。结合前缀和时间戳的文件夹名称为新的文件夹多个文件夹,只需前缀

我在我工作的医院庞大的研究项目,我与呈现给我一个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文件的一切,我一直在使用各种脚本等任务,使用FOR/F走这个文件,如果让所有人都有了一个想法解决的课题编号的的。

这曾经是真正的picklin'我noggin。帮帮我!!!

-----其他信息----- 我一直在进步,但它仍然是不正确的。我使用的脚本如下图所示,但它的移动,而不是由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\* 
    ) 
) 

回答

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命令的源和目标路径已被修改;
  • 所有路径都被正确引用;
+0

感谢 - 不知道这:) 为你一个问题 - 你能告诉我一些关于什么%% b的意思,以及它是如何工作的?我将添加到您给我的代码中,以2字母前缀进一步隔离组合文件,并将它们重命名为我将它们复制......但它无法正常工作。 –

+0

看看['for /F'](http://ss64.com/nt/for_f.html) - 你会发现像'%% a','%% b'这样的引用的意思。 '?'是通配符,表示单个字符 - 请参阅['dir'](http://ss64.com/nt/dir.html)。你当然可以问一个关于你的新问题的新问题...... – aschipfl

相关问题