批处理文件,用于根据文件名中的字符复制文件

1 batch-file

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

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

谢谢.

Joe*_*oey 5

这需要多个部分:

  1. 延迟扩张.这是从下面的循环中获取子字符串所需的:

    setlocal enableextensions enabledelayedexpansion
    
    Run Code Online (Sandbox Code Playgroud)
  2. 一个for用于遍历文件循环

    for %%x in (*.txt) do (
    
    Run Code Online (Sandbox Code Playgroud)
  3. 找到相关的子字符串:

        set "filename=%%x"
        set "folder=!filename:~1,2!"
    
    Run Code Online (Sandbox Code Playgroud)

    注意!filename!这里的用法.这是使用延迟扩展.通常会引用环境变量,%filename%但在解析完整循环时会扩展这些变量,然后这些变量将减少%filename%为空.延迟扩展,使用!解决了这个问题.

  4. 创建文件夹:

        if not exist !folder! mkdir !folder!
    
    Run Code Online (Sandbox Code Playgroud)

    这仅创建文件夹(如果该文件夹尚不存在).

  5. 复制文件:

        copy "%%x" !folder!
    )
    
    Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

@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!
)
Run Code Online (Sandbox Code Playgroud)