как скопировать файл в дочерний каталог с таким же именем (рис.) в родительских каталогах, пронумерованных (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
*
в другой подстановочный знак, если вы хотите фильтровать подпапки по имени
- 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.