1

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

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

谢谢。

4

1 回答 1

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!
)
于 2012-07-16T08:09:23.000 回答