0

我正在尝试创建一个批处理文件。

它应该让指定源和目标文件夹。将解析源文件夹,并根据文件名的一部分将文件移动到目标文件夹。源文件夹中会有多个文件需要解析。

这些文件将类似于file-1-tmp.txt, file-2-tmp.txt, file-3-tmp.txt etc. 我使用 FOR /F 命令使用令牌和分隔符查看的内容 - 但无法让它追索文件夹中的所有文件

如果文件有-1-,它将被移动到目标如果文件有-2-,它将被移动到另一个目标。

ps:在我把头发都弄掉之前请帮忙

4

2 回答 2

2

您可以只执行多个命令,每种类型的文件一个吗?:

for %%i in (*-1-*.*) do move "%%i" dir1\.
for %%i in (*-2-*.*) do move "%%i" dir2\.
for %%i in (*-3-*.*) do move "%%i" dir3\.
...etc...

更新

根据@Andriy M 的建议,一种更简单的方法是:

for %%n in (1 2 3 <...etc...>) do move *-%%n-*.* dir%%n\.
于 2013-01-16T00:06:36.497 回答
1

对于这个问题可能有多种方法。

例如,您可以对需要移动到同一目的地的每组文件使用单独的命令,例如在@Loadmaster 的答案中。

一种完全不同的方法是遍历所有文件,在进行时确定每个文件的目的地。这种方法的实现可能如下所示:

@ECHO OFF
FOR %%I IN ("D:\path\to\source\file-*-tmp.txt") DO (
  FOR /F "tokens=2 delims=-" %%C IN ("%%C") DO (
    IF %%C == 1 (
      MOVE %%I D:\path\to\destination\1
    ) ELSE IF %%C == 2 (
      MOVE %%I D:\path\to\destination\2
    ) ELSE IF ...
    ...
  )
)

也就是说,您迭代存储在特定文件夹中的文件并使用简单FOR循环匹配特定掩码。在循环体中,您使用另一个循环,即FOR /Fone 来拆分名称并到达确定目标的部分。获得该部分后,您可以使用一组嵌套IF命令将其单独与所有可能的值进行比较,并为每个匹配项指定一个MOVE命令以相应地放置文件。

您还可以修改上述脚本,以便更方便地指定目标路径。特别是,您可以在脚本的开头准备一组包含所有可能目标路径的变量。在内部循环的主体中,IF您将只使用一个来确定与提取的部分对应的“目标变量”是否存在,而不是多个 s。如果是这样,您只需使用存储在该变量中的路径将文件移动到。以下是这种变体的实现方式:

@ECHO OFF
SETLOCAL
SET "dest1=D:\path\to\destination\1"
SET "dest2=D:\path\to\destination\2"
...
FOR %%I IN ("D:\path\to\source\file-*-tmp.txt") DO (
  FOR /F "tokens=2 delims=-" %%C IN ("%%C") DO (
    SETLOCAL EnableDelayedExpansion
    IF DEFINED dest%%C MOVE %%I !dest%%C!
    ENDLOCAL
  )
)
于 2013-01-18T16:01:16.173 回答