如何在批处理文件的文件夹中循环

时间:2018-06-13 03:15:28

标签: file batch-file xcopy

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

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

如果新文件夹存在,我需要验证新文件夹中是否存在文件,然后我需要在此文件末尾用«.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

大家好!

1 个答案:

答案 0 :(得分:0)

假设源目录("文件夹"是GUI中的工件;文件系统中的结构是"目录")是%sourceFolder%,目标目录是{ {1}};并且还假设您只需要复制文件(而不是整个子树):

  1. 要循环浏览%finalFolder%中的文件,请使用%sourceFolder%循环:

    for
  2. 在子例程for %%f in ("%sourceFolder%\*") do call :copyOneFile "%%~f" exit /b 中,您将当前文件设为: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%
    
  4. 要了解构造%~nx1等,请使用for /?。注意,ren的第二个参数必须只包含文件名,不允许使用路径。

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

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

    • 使用适当的命令代替delcopy