【问题标题】:How to loop in a folder with batch file如何在包含批处理文件的文件夹中循环
【发布时间】:2018-11-22 12:36:57
【问题描述】:

我需要对批处理文件做一些事情......

我需要将一个文件夹复制到另一个文件夹,但是...

如果新文件夹存在,我需要验证新文件夹中的文件是否存在,然后我需要在这个文件的末尾用«.old»重命名文件,然后才能复制新文件。 我在 Java、php 等方面有丰富的编程经验,但不是真正使用批处理文件...

我正在使用 java/php 的语法来解释我的问题....

set folderOrigin=d:\test1
set folderFinal=d:\test5 
if EXIST %folderFinal% (
  for (fileOrigin : folderOrigin){
      variableNamefileOrigin = fileOrigin
      for (fileFinal : folderFinal){
          variableNamefileFinal = fileFinal            
          if (variableNamefileOrigin == variableNamefileFinal){
              newvariable = variableNamefileFinal + ".old"
              ren variableNamefileFinal newvariable
              xcopy /s /q %folderOrigin%+%variableNamefileOrigin% 
              %folderFinal%+%variableNamefileFinal% 
          }
      }
  }
) else (
    xcopy /s /q %dossierOrigine% %dossierDestinataire%
)
pause

谢谢大家!

【问题讨论】:

  • 你读过什么帮助文件说你可以使用花括号?您的大多数命令都没有使用正确的语法。打开命令提示符并键入命令名称,后跟 /?阅读命令的帮助文件。
  • @Squashman 也许I m using a syntax of java/php to explain my problem....这行可以解释大括号的异端
  • @Magoo 好点。仍然不是不阅读帮助文件以确定正确语法的借口。
  • 我使用这种语法作为伪代码来解释我的问题...我知道帮助...我已经阅读了一些关于它的内容...但它不容易理解。 ..:) PS:我的英语不是很完美,所以我试着写一些清楚的东西来解释我的问题
  • 所以你想让我们根据你的伪代码为你写一个脚本?这不是此类请求的正确位置!您必须自己尝试并在遇到特定问题时返回!请阅读tour并学习How to Ask

标签: file batch-file xcopy


【解决方案1】:

假设源目录(“文件夹”是 GUI 中的工件;文件系统中的结构是“目录”)是 %sourceFolder%,目标目录是 %finalFolder%;并假设您只需要复制 files (而不是整个子树):

  1. 要遍历%sourceFolder% 中的文件,请使用for 循环:

    for %%f in ("%sourceFolder%\*") do call :copyOneFile "%%~f"
    exit /b
    
  2. 在子程序:copyOneFile 中,当前文件为%1。要检查它是否存在于%finalFolder% 中,请使用if exist,如果存在则重命名它,但在检查.old 文件是否已经存在之前:

    :copyOneFile
    
    if exist "%finalFolder%\%~nx1" (
      if exist "%finalFolder\%~n1.old" del "%finalFolder\%~n1.old"
      ren "%finalFolder\%~nx1" "%~n1.old"
    )
    
  3. 现在您可以将文件从源文件夹复制到目标文件夹:

    copy "%~1" "%finalFolder%
    

要了解%~nx1 等结构,请使用for /?。注意ren的第二个参数必须只有文件名,不能有路径。

如果您需要复制整个子树,则:

  • 复制文件后,重做for /d获取目录。

  • 使用适当的命令代替delcopy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    相关资源
    最近更新 更多