Как зациклить в папке с командным файлом - PullRequest
0 голосов
/ 13 июня 2018

Мне нужно что-то сделать с командным файлом ....

Мне нужно скопировать папку в другую папку, но ...

Если новая папка существует, мне нужнопроверьте, существует ли файл в новой папке, затем мне нужно переименовать файл с «.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 голосов
/ 13 июня 2018

Предполагается, что исходный каталог («папки» являются артефактами в графическом интерфейсе; структуры в файловой системе - «каталоги») равен %sourceFolder%, а каталог назначения - %finalFolder%;а также при условии, что вам нужно скопировать только файлы (не целое поддерево):

  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, чтобы получить каталоги.

  • Используйте соответствующие команды вместо del и copy.

...