Компьютерный форум 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=333040)

Peutrov 07-02-2018 17:05 2796529

замена файлов и подпапок
 
Пожалуйста, предложите пример как реализовать

"1"
существует папка с подпапками и файлами:
C:\example\abc\file1.txt
C:\example\abc\xyz\file2.txt
C:\example\abc\xxx\zzz\file3.txt
C:\example\abc\xxx\zzz\file4.txt
(в файлах содержатся данные)

"2"
есть другая папка с одноименными файлами и подпапками, но содержимое файлов уже другое
abc\file1.txt
abc\xyz\file2.txt
abc\xxx\zzz\file3.txt
abc\xxx\zzz\file4.txt


Папка example может иметь любое другое имя.. например C:\ixampal\. В таком случае, как содержимое "2" разместить (копировать с заменой) в "1"
В командный файл можно ведь применить вставку из буфера? (правая кнопка мыши - вставить). Можно ли в таком случае вставлять имя папки? Например
введите имя папки, куда будут скопированы файлы: пишем вручную или вставляем C:\ixampal\
Можно ли придумать какую-то защиту, коррекцию, в случае если пользователь забудет в конце указать символ "\"

ведь если в конце этого символа нет - команда может сработать неадекватно, верно?


спасибо за рассмотрение

alpap 07-02-2018 17:55 2796540

Код:

@echo off
set "dy=C:\example"
set "dz=D:\example"

if not exist "%dz%" md "%dz%"
subst z: "%dz%"
subst y: "%dy%"
pushd y:\
 for /f "delims=" %%a in ('dir /ad/b/s') do 2>nul md "z:%%~pnxa"
 for /f "delims=" %%a in ('dir /a-d/b/s') do >nul copy "%%~nxa" "z:%%~pnxa"
popd
subst y: /d
subst z: /d
exit


megaloman 07-02-2018 19:45 2796574

Насколько я понимаю, в папке 2 эталонные файлы, и путь к ним надо указать верно. Укажите свой путь. С остальным возможны варианты.
Пишем вручную или вставляем C:\ixampal\ и не думаем, есть там \ или нет
Код:

@Echo Off
cls
Set "Fold1=С:\example"


Pushd "%Fold1%"
If Not %ErrorLevel%==0 (
        Echo "%Fold1%"
        Pause
        Exit /B 240
)
Set "Files=Z:\Fold2\*.*"

Xcopy /S /Y "%Files%"
Popd

Помещаем батник в C:\ixampal\ или как она там называется и не указываем в батнике эту папку совсем
Код:

@Echo Off
cls
Set "Fold1=%~dp0"

Всё что ниже берём из предыдущего батника
На этот батник сделайте на рабочем столе значок, и нужную для обработки папку, например, C:\ixampal, в проводнике затаскивайте на этот значок. То есть, руками папку прописывать не надо.
Код:

@Echo Off
cls
If "%~1"=="" (
        Echo Input folder not defined
        Pause
        Exit /B  240
)
Set "Fold1=%~1"

Всё что ниже берём из первого батника


Время: 18:32.

Время: 18:32.
© OSzone.net 2001-