根据文件名解析文件夹移动文件

时间:2013-01-15 22:50:26

标签: file parsing batch-file dos

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

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

文件类似于file-1-tmp.txt, file-2-tmp.txt, file-3-tmp.txt etc. 我查看了使用FOR / F命令使用令牌和delim - - 但是无法使用它来追索文件夹中的所有文件

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

ps:在我脱掉所有头发之前请帮忙

2 个答案:

答案 0 :(得分: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\.

答案 1 :(得分:1)

这个问题可能存在各种方法。

例如,您可以为需要移动到同一目的地的每组文件使用单独的命令,例如@Loadmaster's answer

一种相当不同的方法是迭代所有文件,随时确定每个文件的目的地。这种方法的实现可能如下所示:

@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 /F,分割名称并转到确定目标的部分。获得该部分后,使用一组嵌套IF命令将其与所有可能值进行单独比较,并为每个匹配指定MOVE命令以相应地放置文件。

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

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