Batch file 批处理文件以根据文件名中的字符复制文件

Batch file 批处理文件以根据文件名中的字符复制文件,batch-file,Batch File,我需要一个批处理文件,根据文件名将文件从单个文件夹复制到多个文件夹。文件的格式为abbcccc.txt,其中a和ccccc不重要,但BB是两个字符的代码。例如,文件aQWertyu.txt aWErtyui.txt应分别复制到文件夹QW和WE,这些文件夹将由脚本创建 我见过使用FOR/f的示例脚本,但看不到如何解析文件、检查字符2和3、然后创建文件夹和复制文件 谢谢 这需要多个部分: 延迟扩展。这是从下面的循环中获取子字符串所必需的: setlocal enableextensions enab

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

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


谢谢

这需要多个部分:

  • 延迟扩展。这是从下面的循环中获取子字符串所必需的:

    setlocal enableextensions enabledelayedexpansion
    
  • 用于迭代文件的
    for
    循环

    for %%x in (*.txt) do (
    
  • 查找相关的子字符串:

        set "filename=%%x"
        set "folder=!filename:~1,2!"
    
    注意
    的用法!文件名这里。这是使用延迟扩展。通常使用
    %filename%
    引用环境变量,但在解析完整循环时会展开这些变量,然后将
    %filename%
    减少为零。延迟扩展,使用
    解决了这个问题

  • 创建文件夹:

        if not exist !folder! mkdir !folder!
    
    这仅在文件夹尚不存在时创建该文件夹

  • 复制文件:

        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!
    )
    

    这需要多个部分:

  • 延迟扩展。这是从下面的循环中获取子字符串所必需的:

    setlocal enableextensions enabledelayedexpansion
    
  • 用于迭代文件的
    for
    循环

    for %%x in (*.txt) do (
    
  • 查找相关的子字符串:

        set "filename=%%x"
        set "folder=!filename:~1,2!"
    
    注意
    的用法!文件名这里。这是使用延迟扩展。通常使用
    %filename%
    引用环境变量,但在解析完整循环时会展开这些变量,然后将
    %filename%
    减少为零。延迟扩展,使用
    解决了这个问题

  • 创建文件夹:

        if not exist !folder! mkdir !folder!
    
    这仅在文件夹尚不存在时创建该文件夹

  • 复制文件:

        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!
    )
    

    非常感谢-太好了!对于“set”folder=!filename:~1,2!”,1和2的规则是什么?1是常量,然后是接下来的2个字符?1是从中开始子字符串的字符,2是长度。虽然如此,但这不是2,2,因为我要使用的字符从位置2开始,表示2个字符,还是第一个字符位于位置0?@user1528218-起始位置是从零开始的,0是第一个字符,1是第二个字符,等等。似乎缺少一件事:在第二个
    之后,如果不存在…
    ,可能会有类似的情况:
    如果不存在!文件夹好吧,我从来没有…
    :)只是开玩笑,对不起。非常感谢-太好了!对于“set”folder=!filename:~1,2!”,1和2的规则是什么?1是常量,然后是接下来的2个字符?1是从中开始子字符串的字符,2是长度。虽然如此,但这不是2,2,因为我要使用的字符从位置2开始,表示2个字符,还是第一个字符位于位置0?@user1528218-起始位置是从零开始的,0是第一个字符,1是第二个字符,等等。似乎缺少一件事:在第二个
    之后,如果不存在…
    ,可能会有类似的情况:
    如果不存在!文件夹嗯,我从来没有…
    :)只是开玩笑,对不起。