2012-07-16 151 views
1

我需要一个批处理文件来基于文件名将文件从单个文件夹复制到多个文件夹。这些文件的格式为aBBccccc.txt,其中a和ccccc无关紧要,但BB是2个字符代码。例如,文件aQWertyu.txt aWErtyui.txt应分别复制到文件夹QW和WE,并且这些文件夹将由脚本创建。根据文件名中的字符复制文件的批处理文件

我见过使用FOR/f的示例脚本,但看不到如何解析文件,检查字符2和3,然后创建文件夹并复制文件。

谢谢。

回答

5

这需要多个部件:

  1. 延迟扩展。这需要从下面的循环中得到一个字符串:

    setlocal enableextensions enabledelayedexpansion 
    
  2. 一个for循环用于遍历文件

    for %%x in (*.txt) do (
    
  3. 找到相关的字符串:

    set "filename=%%x" 
        set "folder=!filename:~1,2!" 
    

    注这里使用!filename!。这是使用延迟扩展。通常环境变量以%filename%引用,但是当解析完成的循环时,这些变量将被扩展,然后完成循环,然后将%filename%减少为无。延迟扩展,使用!解决了这个问题。

  4. 创建的文件夹:

    if not exist !folder! mkdir !folder! 
    

    ,如果它不存在这个仅创建该文件夹。

  5. 复制文件:

    copy "%%x" !folder! 
    ) 
    

全部放在一起:

@echo off 
setlocal enableextensions enabledelayedexpansion 
for %%x in (*.txt) do (
    set "filename=%%x" 
    set "folder=!filename:~1,2!" 
    if not exist !folder! mkdir !folder! 
    copy "%%x" !folder! 
) 
+0

非常感谢 - 完美!对于'设置'文件夹=!文件名:〜1,2!''1和2 - 1的规则是恒定的,那么接下来的2个字符? – user1528218 2012-07-16 08:16:40

+0

1是开始子串的字符,2是长度。 – Joey 2012-07-16 08:24:50

+0

认为是这样,但是不会让它成为2,2,因为我想要使用的字符是从2位开始的2个字符,还是位置0的第一个字符? – user1528218 2012-07-16 08:29:04

相关问题