1 (изменено: mike.sunday19, 2021-10-07 22:56:23)

Тема: CMD/BAT: копирование файла во вложенные подпапки

Вот есть такой код на vbs на копирование файла в вложенные подпапки:


Dim fso, fold1, fol1, foc1, fpath, file1
Set fso = CreateObject("Scripting.FileSystemObject")
Set file1 = fso.GetFile("D:\Файл\forma_dog.pdf")
Set fold1 = fso.GetFolder("D:\Юр.лица")
Set foc1 = fold1.SubFolders
For Each fol1 in foc1
	fpath = fol1.Path & "\Постоянный договор\" & file1.name
	file1.Copy (fpath)
	'MsgBox fpath
Next

Т.е. я каждый день на работе должен копировать файл forma_dog.pdf в папку с названием "Постоянный договор" в папках у каждого клиента. Иначе говоря должна получится вот такая структура:
D:\Юр.лица\Петя\Постоянный договор\forma_dog.pdf
D:\Юр.лица\Вася\Постоянный договор\forma_dog.pdf
D:\Юр.лица\Саша\Постоянный договор\forma_dog.pdf
Хотелось бы чтобы код работал не зная заранее имен клиентов, как на примере vbs. Т.е. чтобы он проходил каждую вложенную папку папки Юр.лица.

Как мне это сделать на CMD/BAT?

2

Re: CMD/BAT: копирование файла во вложенные подпапки


@echo off & title %~nx0 & SetLocal EnableExtensions EnableDelayedExpansion

rem Файл для копирования:
set "sFilePdf=D:\Файл\forma_dog.pdf"

rem Папка Юр.лица\
set "sFolderUL=D:\Юр.лица\"

rem Папка Постоянный договор\
set "sFolderPD=Постоянный договор\"

for /d %%a in ("!sFolderUL!*") do (
  xcopy "!sFilePdf!" "%%~a\!sFolderPD!" /y >nul
)

EndLocal
exit /b

Копирование происходит в папки первого уровня вложенности.
В основной строке (xcopy "!sFilePdf!" "%%~a\!sFolderPD!" /y >nul):
/y подавляет запрос на перезапись существующего файла,
>nul подавляет вывод сообщений на экран.

3 (изменено: mike.sunday19, 2021-10-09 00:18:31)

Re: CMD/BAT: копирование файла во вложенные подпапки

Правильно ли я понял, что этот код надо засунуть в файл .bat и сохранить в oem 866 кодировке?
Я сделал так. Не работает.
Попробовал сохранить в ansi. Аналогично.
Правда , должен отметить что пути я поставил другие. Т.к. пути что я в заголовке темы указал - это с работы. На работе я не успел проверить код. И сейчас я опробовал на домашнем ПК.
Кидаю код с путями дом.ПК:


@echo off & title %~nx0 & SetLocal EnableExtensions EnableDelayedExpansion

rem Файл для копирования:
set "sFilePdf=D:\У4ё6а\WSH\Файл\forma.pdf"

rem Папка Юр.лица\
set "sFolderUL=D:\У4ё6а\WSH\Клиенты\"

rem Папка Постоянный договор\
set "sFolderPD=Постоянный договор\"

for /d %%a in ("!sFolderUL!*") do (
	xcopy "!sFilePdf!" "%%~a\!sFolderPD!" /y >nul
)

EndLocal
exit /b

Структура папок:
D:\У4ё6а\WSH\Клиенты\Федорина Анна\Постоянный договор
D:\У4ё6а\WSH\Клиенты\Чижиков Иван\Постоянный договор

Вроде все верно. Но почемуто не работает

4

Re: CMD/BAT: копирование файла во вложенные подпапки

mike.sunday19 пишет:

Правильно ли я понял, что этот код надо засунуть в файл .bat и сохранить в oem 866 кодировке?

Да, в файл .bat, кодировка 866.

С новыми путями у меня также всё копирует, вряд ли в путях дело, разве что в названиях папок на вашем диске есть латинская буква, похожая на кириллицу (o, a), либо концевой пробел.
Я создавал структуру папок, копируя их названия из сообщения.
У4ё6а - кириллица и цифры 4, 6. WSH - латиница. Клиенты, Файл - кириллица.

Я немного видоизменил .bat-файл, чтобы он выводил больше информации.
И в конце поставил ожидание нажатия клавиши, чтобы при запуске из Проводника окно .bat-файла не закрывалось сразу после выполнения.
Пробуйте - что выводится?

@echo on & title %~nx0 & SetLocal EnableExtensions EnableDelayedExpansion

rem Файл для копирования:
set "sFilePdf=D:\У4ё6а\WSH\Файл\forma.pdf"

rem Папка Юр.лица\
set "sFolderUL=D:\У4ё6а\WSH\Клиенты\"

rem Папка Постоянный договор\
set "sFolderPD=Постоянный договор\"

for /d %%a in ("!sFolderUL!*") do (
  echo. "!sFilePdf!" -^> "%%~a\!sFolderPD!"
  xcopy "!sFilePdf!"     "%%~a\!sFolderPD!" /y >nul
)

pause

EndLocal
exit /b