我正在尝试创建批处理文件。
应该指定源文件夹和目标文件夹。将解析源文件夹,并根据文件名的一部分将文件移动到目标文件夹。源文件夹中将有多个文件需要解析。
文件类似于file-1-tmp.txt, file-2-tmp.txt, file-3-tmp.txt etc.
我查看了使用FOR / F命令使用令牌和delim - - 但是无法使用它来追索文件夹中的所有文件
如果文件有-1-如果文件有-2-则它将被移动到目的地,它将被移动到另一个目的地。
ps:在我脱掉所有头发之前请帮忙
答案 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
)
)