Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Копирование файла в кучу разных папок с переименованием его имени в имя папки. (http://forum.oszone.net/showthread.php?t=345311)

Bagsya 25-05-2020 12:00 2922547

Копирование файла в кучу разных папок с переименованием его имени в имя папки.
 
Добрый день! Помогите пожалуйста с батником.
Нужно скопировать файл в кучу папок, при этом задавая имя файлу такое же как и имя папки, в которую он копируется (расширение файла не меняется, только имя).

megaloman 25-05-2020 13:45 2922555

Bagsya, где находится (например, в какой-то папке)
Код:

@Echo Off
        Set "FileIn=Z:\Box_In\Обычная ерунда.ха ха ха"
        Set "BoxOut=Z:\Box_Out"

        For %%f In ("%FileIn%") Do (
                FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxOut%" /S /B /A:D`) DO >nul Copy "%FileIn%" "%%d\%%~nxd%%~xf"
        )
Exit /B

или откуда берётся (напримпр, список) куча?
Код:

@Echo Off
        Set "FileIn=Z:\Box_In\Обычная ерунда.ха ха ха"
        Set BoxOut="Z:\Box_Out\_Work" "Z:\Box_Out\_XLS" "Z:\Box_Out\Дискета от книги" "Z:\Музыка\Манго Манго"

        For %%f In ("%FileIn%") Do (
                FOR %%d IN (%BoxOut%) DO >nul 2>&1 Copy "%FileIn%" "%%~d\%%~nxd%%~xf"
        )
Exit /B


Iska 25-05-2020 14:13 2922560

Bagsya, тогда Вам следовало бы озадачиться вопросом — как узнать перечень этой кучи папок?

Bagsya 25-05-2020 14:49 2922571

Предметно так, полный путь файла: e:\4\a0001.vhdshows и его надо скопировать во все папки находящиеся в e:\5 (там папки вида e:\5\a0001, e:\5\a0002 и т.д., меняются буквы и цифры). И вот в папку a0002 файл должен копироваться с именем a0002.vhdshows, а в папку, например, с0845 - с именем с0845.vhdshows.

alpap 25-05-2020 15:20 2922581

Код:

@echo off
set "file=e:\4\a0001.vhdshows"
set "sdir=e:\5"

call :#copy "%sdir%" "%file%"
pause& exit

:#copy
 for /d /r "%~1" %%a in (*) do >nul copy "%~2" "%%a\%%~nxa%~x2"
exit /b


Bagsya 25-05-2020 15:22 2922582

вот так прописал, запустил, пишет "отказано в доступе".

Код:

@Echo Off
        Set "FileIn=e:\4\a0001.vghdshows"
        Set "BoxOut=e:\5"

        For %%f In ("%FileIn%") Do (
                FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxOut%" /S /B /A:D`) DO >nul Copy "%FileIn%" "%%d\%%~nxd%%~xf"
        )
Exit /B

Тоже пишет "отказано в доступе"
Код:

@echo off
set "file=e:\4\a0001.vhdshows"
set "sdir=e:\5"

call :#copy "%sdir%" "%file%"
pause& exit

:#copy
 for /d /r "%~1" %%a in (*) do >nul copy "%~2" "%%a\%%~nxa%~x2"
exit /b


alpap 25-05-2020 15:55 2922590

тогда запуск от админа или ярлык с запускать с админ правами или решать проблему с доступом, к нам-то какие претензии.

и неплохо бы сказать как запускаете это все, чудес тут разных хватает.

Bagsya 25-05-2020 16:08 2922595

Сам не понимаю почему "отказано в доступе". Командную строку с правами администратора запускал и из нее уже батник и сам батник по правой кнопке мыши выбирал запуск от администратора. Вин7, домашний комп, ничего особенного нет.

Bagsya 25-05-2020 16:16 2922597

Вот скриншоты папок и результат обоих батников.

megaloman 25-05-2020 16:17 2922598

Bagsya, Проделайте батник, файл C:\txt.txt прикрепите к сообщению
Код:

@Echo Off
        Set "FileIn=e:\4\a0001.vghdshows"
        Set "BoxOut=e:\5"

        >c:\txt.txt 2>&1 dir "%FileIn%" /b /a:-D
        >>c:\txt.txt 2>>&1 dir "%BoxOut%" /b /a:D /S
Exit /B


Bagsya 25-05-2020 16:20 2922600

Вложений: 1
Вот:

megaloman 25-05-2020 19:09 2922642

Bagsya,
Тупой вопрос: а руками хоть один файл удаётся скопировать?
В предоставленном txt.txt первой строкой идет:

Файл не найден
e:\5\a0001
..............

То есть непонятно, что с указанием файла e:\4\a0001.vghdshows
На скриншоте e:\4\a0001.vhdshows

Попробуйте отладочный вариант, допустим, Вы его назовете run2.bat
Код:

@Echo On

        Set "FileIn=e:\4\a0001.vghdshows"
        Set "BoxOut=e:\5"

        For %%f In ("%FileIn%") Do (
                FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxOut%" /S /B /A:D`) DO Copy "%FileIn%" "%%d\%%~nxd%%~xf"
        )
Exit /B

Запустите его в командном окне в виде

>C:\txt1.txt 2>&1 run2.bat

файл txt1.txt прикркпите

Bagsya 25-05-2020 20:44 2922650

Вложений: 1
Руками все копируется нормально. Имя и расширение файла проверил, все правильно было в батниках прописано (a0001.vhdshows). Применил сейчас ваш отладочный вариант и о чудо, файл скопировался во все папки как надо. Отчет txt1.txt прилагаю. Вопрос, что было не так?

Bagsya 25-05-2020 21:10 2922659

в каком именно боевом варианте? Если не сложно напишите с правильными путями батник, а то у меня при запуске батников все равно "отказано в доступе" пишет, хотя пути вроде изначально правильные прописаны.

megaloman 25-05-2020 21:29 2922661

Вложений: 1
Bagsya,
Код:

@Echo Off

        Set "FileIn=e:\4\a0001.vhdshows"
        Set "BoxOut=e:\5"

        For %%f In ("%FileIn%") Do (
                FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxOut%" /S /B /A:D`) DO >nul Copy "%FileIn%" "%%d\%%~nxd%%~xf"
        )
Exit /B

В прикреплённом файле мой батник, переименуйте его. У меня он работает с Вашими путями - взял полностью из txt.txt
Может, Ваш батник имеет имя, совпадающее с какой-то программой?

Bagsya 25-05-2020 22:32 2922667

Вложений: 1
Блин, ну что за беда, понять не могу, посмотрите на скриншот, вроде все верно и пути и каталоги, но "отказано в доступе" и все((( в ручную все копируется, проблем с доступом нет никакого.

megaloman 25-05-2020 22:37 2922668

Bagsya, Вместо Echo Off сделайте Echo On, посмотрите, что получится

Bagsya 25-05-2020 23:00 2922670

Вложений: 2
Вобщем оказалось что все копирует как надо по факту, просто эта надпись "отказано в доступе" выскакивает и с толку сбивает))) Не понятно откуда она берется. Прилагаю скриншот командной строки и вывод результата в 1.txt. Спасибо за помощь!

alpap 26-05-2020 16:02 2922777

Bagsya,
ну попробуйте еще выполнить пункты отсюда.

Iska 26-05-2020 17:13 2922793

Цитата:

Цитата Bagsya
просто эта надпись "отказано в доступе" выскакивает и с толку сбивает))) Не понятно откуда она берется. »

Проверьте разрешения на каталог «e:\5\c0121»:
txt1.txt
Код:


e:\4>Copy "e:\4\a0001.vhdshows" "e:\5\c0121\c0121.vhdshows"
Отказано в доступе.
Скопировано файлов:        0.


megaloman 26-05-2020 19:36 2922815

Iska, Примите уверения в совершеннейшем к Вам почтении. О, где были мои глаза и почему мои руки в контекстном поиске не набрали строку "доступ".

Iska 26-05-2020 20:16 2922824

megaloman, алаверды, коллега: я было начал писать автору, что «…выполните следующий код: >"Out.txt" 2>&1 "200525.bat"», а потом поднял глаза и увидел, что данная рекомендация уже озвучивалось ранее:
Цитата:

Цитата megaloman
Запустите его в командном окне в виде
>C:\txt1.txt 2>&1 run2.bat
файл txt1.txt прикркпите »

:).


Вот почему я всегда рекомендую пишущим мне в личку писать не мне в личку, а на форум: коллективный разум знает больше и работает плодотворнее.

Bagsya 27-05-2020 10:32 2922930

Цитата:

Цитата Iska
Проверьте разрешения на каталог «e:\5\c0121»: »

Точно, был атрибут "только для чтения" на с0121, поэтому и не скопировало. Всем спасибо!!!

megaloman 27-05-2020 11:26 2922939

Bagsya, На будущее, чтобы не "чухать патылицу", вот код, который выдаст сообщение, если копирование было неуспешным:
Код:

@Echo Off
cls
        Set "FileIn=e:\4\a0001.vhdshows"
        Set "BoxOut=e:\5"

        For %%f In ("%FileIn%") Do (
                FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxOut%" /S /B /A:D`) DO >nul Copy "%FileIn%" "%%d\%%~nxd%%~xf"||echo Copy "%FileIn%" "%%d\%%~nxd%%~xf"
        )
pause
Exit /B


Iska 27-05-2020 21:01 2923009

Цитата:

Цитата megaloman
…||echo Copy "%FileIn%" "%%d\%%~nxd%%~xf" »

Тогда хоть Error туда добавить, что ли :).

megaloman 27-05-2020 21:05 2923011

Iska, зачем? И без этого перед этой строкой, в которой возникла проблема, сначала появится сообщение, например, "отказано в доступе"

Iska 27-05-2020 21:44 2923019

megaloman, а, ну да, согласен.


Время: 02:25.

Время: 02:25.
© OSzone.net 2001-