我正在尝试创建一个批处理文件。
它应该让指定源和目标文件夹。将解析源文件夹,并根据文件名的一部分将文件移动到目标文件夹。源文件夹中会有多个文件需要解析。
这些文件将类似于file-1-tmp.txt, file-2-tmp.txt, file-3-tmp.txt etc.
我使用 FOR /F 命令使用令牌和分隔符查看的内容 - 但无法让它追索文件夹中的所有文件
如果文件有-1-,它将被移动到目标如果文件有-2-,它将被移动到另一个目标。
ps:在我把头发都弄掉之前请帮忙
我正在尝试创建一个批处理文件。
它应该让指定源和目标文件夹。将解析源文件夹,并根据文件名的一部分将文件移动到目标文件夹。源文件夹中会有多个文件需要解析。
这些文件将类似于file-1-tmp.txt, file-2-tmp.txt, file-3-tmp.txt etc.
我使用 FOR /F 命令使用令牌和分隔符查看的内容 - 但无法让它追索文件夹中的所有文件
如果文件有-1-,它将被移动到目标如果文件有-2-,它将被移动到另一个目标。
ps:在我把头发都弄掉之前请帮忙
您可以只执行多个命令,每种类型的文件一个吗?:
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\.
对于这个问题可能有多种方法。
例如,您可以对需要移动到同一目的地的每组文件使用单独的命令,例如在@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 /F
one 来拆分名称并到达确定目标的部分。获得该部分后,您可以使用一组嵌套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
)
)