在批处理文件中组合两个FOR命令(/ f / l)

时间:2012-03-22 09:26:02

标签: for-loop batch-file cmd dos

好的伙计们,我对使用批处理文件相当陌生,而且我之前创建的两个文件都是独立工作的。

我希望将它们组合起来,但我仍然不完全理解FOR命令。我希望有人可以将这两组代码组合成一个,如果可能的话,解释如何从我的两个来源中得到他们使用的代码。

  1. 此文件将另一个文件(在本例中为test.txt)复制到目录
  2. 中的每个子目录

    FOR /R d:\ %%A IN (test.txt) DO copy d:\%username%\Desktop\Test\Resources\test.txt %%A
    FOR /R h:\ %%A IN (test.txt) DO copy d:\%username%\Desktop\Test\Resources\test.txt %%A

    1. 此文件复制并重命名另一个文件X次(在本例中为5次),以1为增量重命名每个连续副本。
    2. For /l %%1 in (1,1,10) do ( copy test.txt test%%1.txt > nul )

      基本上我希望将所选文件(test.txt)从设置位置复制到目录中的每个子目录,然后在每个文件夹中复制X次,并用增加的值重命名,例如。

      test1.txt

      的test2.txt

      test3.txt

      提前谢谢你。

1 个答案:

答案 0 :(得分:2)

这实际上很直接。

您已经拥有从源复制到每个子目录的功能代码。在伪代码中:FOR (each directory) DO COPY source to target

您还拥有可以使用递增名称复制文件10次的代码。您希望在第1步中为每个目录执行此操作。所以,再次在伪代码中,它看起来像这样:

FOR (each directory) DO (
  COPY source to target
  FOR (N=1 TO 10) DO COPY source to targetN
)

上述语法都不是真实的,除了DO之后的括号实际上是允许批处理FOR命令执行多个命令块的方式。 (实际上还有其他技术可以做到这一点,但是parens工作正常。)

您缺少的部分是如何将递增数字插入%% A目标名称。这是通过使用FOR变量修饰符完成的,如FOR文档末尾所述,您可以通过键入HELP FORFOR /?从命令行访问。

修饰符允许您将文件规范解构为其组成部分。请注意,文件不必在物理上存在,文件规范仍然可以分解为组成部分。

  • %%~dpnA = drive:\ path \ baseName(无扩展名)
  • %%~xA = .extension,包括点。

您已经获得了递增数字 - 我将使用%%N代替%%1。因此,完整目标将是3个组件的串联:%%~dpnA%%N%%~xA

将所有内容放在一起可提供完整的解决方案:

FOR /R d:\ %%A IN (test.txt) DO (
  copy d:\%username%\Desktop\Test\Resources\test.txt %%A
  FOR /L %%N IN (1 1 10) DO copy d:\%username%\Desktop\Test\Resources\test.txt %%~dpnA%%N%%~xA
)