как скопировать файл в дочерний каталог с таким же именем (рис.) в родительских каталогах, пронумерованных (0001,0002,0003)

в основном я использовал пакетный скрипт для организации файлов в каталогах с одинаковыми именами (файл:0001 -> папка 0001) и создал дочерний каталог в каждом - (/ folder0001 / pic), теперь я пытаюсь справиться с файлом jpg в каждом каталоге (0001 / рис, 0002 / рис). Я пытался использовать xcopy, но это не сработало.

Это пакетный сценарий, который я использовал.

      @echo off
for %%i in (*) do (
 if not "%%~ni" == "organize" (
  md "%%~ni\keep_config\pic" && move "%%~i" "%%~ni\keep_config" "%%~d";
  
 )
)

и этот скрипт я пытался использовать для копирования.

      xcopy /s C:\...\New folder\0001\keep_config\pic C:...\New folder\background_main L.jpg

1 ответ

Ваш вопрос очень расплывчатый:

  • каков именно первоначальный макет и каков должен быть результат?
  • мы копируем один файл pic в каждый каталог или разные файлы в каталоги с такими же именами, как у этих файлов?
  • или в каждой пронумерованной подпапке есть файл, который нужно скопировать глубже в ту же подпапку?
  • так далее

Вместо этого я покажу вам, как перебирать каталоги, чтобы вы могли копировать файлы самостоятельно.

Для запуска в каждой подпапке c:\TestFolder вы бы написали:

      for /D %%I in ("c:\TestFolder\*") do COMMAND

здесь:

  • for означает, что будет выполнено несколько раз

  • /D указывает цикл по именам каталогов, а не по именам файлов

  • %%I - это переменная, которую вы можете использовать в своей - она ​​будет заменена каждым каталогом по очереди

  • in ("c:\TestFolder\*") означает, что мы перебираем каждую подпапку внутри папки c:\TestFolder\.

    • Chahge * в другой подстановочный знак, если вы хотите фильтровать подпапки по имени
  • наконец, заменить COMMAND с вашей командой, которая будет выполняться один раз для каждой подпапки, она может иметь произвольные аргументы, включая:

    • будет заменен полным путем к подпапке (без двойных кавычек)
    • будет заменено только названием подпапки (без двойных кавычек)
    • Здесь I это имя переменной после for /D, d означает драйв, p - дорожка, n - имя, x- расширение (если есть - папки могут иметь расширения)
  • %%I в ("c: \ TestFolder *") выполните КОМАНДУ

Пример

Предположим, мы хотим скопировать

  • файл c:\src\first\pic\my.jpg к c:\dst\first\pic\my.jpg
  • файл c:\src\second\pic\my.jpg к c:\dst\second\pic\my.jpg
  • ...так далее...

Предполагая, что все папки уже существуют, команда для этого может быть:

      for /D %%I in ("c:\src\*") do copy /b /y "%%~dpnxI\pic\my.jpg" "c:\dst\%%~nxI\pic\my.jpg"

мы тут:

  • перебрать каждую папку сразу внутри c:\src (т.е. c:\src\second, но нет c:\src\first\pic)
    • для первой папки %%~dpnxI является c:\src\first
    • ...и %%~nxI является first
  • мы копируем SUBFOLDER_PATH\pic\my.jpg к c:\dst\SUBFOLDER_NAME\pic\my.jpg

Ссылка

См. Https://ss64.com/nt/for_d.html и https://ss64.com/nt/for.html.

Другие вопросы по тегам