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

For loop 在批处理文件中组合两个FOR命令(/f/l),for-loop,batch-file,cmd,dos,For Loop,Batch File,Cmd,Dos,好了,伙计们,我对批处理文件还比较陌生,我有两个以前创建的文件,它们都是独立工作的 我希望将它们结合起来,但我仍然不完全理解FOR命令。我希望有人能将这两组代码组合成一个,如果可能的话,解释一下他们是如何从我的两个来源得到他们使用的代码的 此文件将另一个文件(在本例中为test.txt)复制到目录中的每个子目录 FOR/rd:\%%A在(test.txt)中复制d:\%username%\Desktop\test\Resources\test.txt%%A 对于(test.txt)中的/R h:

好了,伙计们,我对批处理文件还比较陌生,我有两个以前创建的文件,它们都是独立工作的

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

  • 此文件将另一个文件(在本例中为test.txt)复制到目录中的每个子目录
  • FOR/rd:\%%A在(test.txt)中复制d:\%username%\Desktop\test\Resources\test.txt%%A
    对于(test.txt)中的/R h:\%%A,请复制d:\%username%\Desktop\test\Resources\test.txt%%A

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

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

    test1.txt

    test2.txt

    test3.txt

    等等


    提前谢谢你。

    这其实很直截了当

    您已经有了从源代码复制到每个子目录的功能代码。在伪代码中:
    对于(每个目录)将源复制到目标

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

    FOR (each directory) DO (
      COPY source to target
      FOR (N=1 TO 10) DO COPY source to targetN
    )
    
    上面的语法都不是真的,除了DO后面的括号实际上是允许batch FOR命令执行多个命令块的方式。(实际上,还有其他方法可以做到这一点,但帕伦夫妇的做法很好。)

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

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

    • %%~dpnA
      =驱动器:\path\baseName(无扩展名)
    • %%~xA
      =。扩展名,包括点
    您已经得到了递增的数字-我将使用
    %%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
    )