Копирование каталога и файлов на другой диск

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
Post Reply
RDT
Posts: 4
Joined: Wed 06 Feb, 2019 10:29
Has thanked: 1 time

Копирование каталога и файлов на другой диск

Post by RDT » Wed 06 Feb, 2019 11:33

Добрый день.

Имеется внешний диск, название диска не известно (D:, E:, F: и т.п.). Требуется скопировать любой каталог/файл (?:\1\2\3\4\*.*) с этого диска на другой диск, название диска также не известно (D:, E:, F: и т.п.). При этом размещение каталога/файла на другом диске должно быть таким же, что и на исходном диске.
Например,
исходное размещение: D:\1\2\3\4\*.*
требуемое размещение: C:\1\2\3\4\*.*
пользователь в FARе выбирает:
- на активной панели диск "D:" и подкаталог "2\"
- на пассивной панели диск "С:" и любой каталог
Затем вызывает пользовательское меню, из которого запускает скрипт копирования:

Code: Select all

{
:  !.! !: -> !#!:
    @rem диск пассивной панели, куда будет скопирован каталог/файлы
    set dDisk=!#!:
    @rem активная панель - исходное размещение каталога\файла
    set cDiskPath=!\
    @rem путь размещения каталога\файла без указания диска
    set cPath=%cDiskPath:~3%
    @rem создать каталог для копирования
    md "%dDisk%\%cPath%!.!\"
    echo  "!^!\!.!\*.*" "%dDisk%\%cPath%!.!\*.*" /D /E /Y /R
    @rem копировать каталог/файлы из исходного размещения в требуемое размещение
    xcopy "!^!\!.!\*.*" %dDisk%\%cPath%"!.!\*.*" /D /E /Y /R
}
При выполнении этого скрипта в строке xcopy возникает ошибка:
"Ошибка создания файла Неверно задано имя папки"

В чём может быть ошибка?

User avatar
DrKnS
Posts: 5105
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 184 times

Копирование каталога и файлов на другой диск

Post by DrKnS » Wed 06 Feb, 2019 11:40

В том, что фар не компроцессор и %cDiskPath:~3% не умеет.
Сложите ваши команды в bat-файл и вызывайте его с параметрами.

RDT
Posts: 4
Joined: Wed 06 Feb, 2019 10:29
Has thanked: 1 time

Копирование каталога и файлов на другой диск

Post by RDT » Wed 06 Feb, 2019 11:47

Ок.
Но! Некоторые команды фар всё-таки смог обработать, например, md (нужный каталог был создан) и echo, а на xcopy выдал ошибку(

User avatar
HaRT
Moderator
Posts: 8605
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 77 times
Been thanked: 140 times

Копирование каталога и файлов на другой диск

Post by HaRT » Wed 06 Feb, 2019 12:49

RDT wrote:
Wed 06 Feb, 2019 11:47
Некоторые команды фар всё-таки смог обработать
См. «Команды операционной системы» в Справке. А те, что вы указываете, там не перечислены, т.ч. выполняются командным процессором, и в вашем случае мне даже не очевидно, что они будут иметь ожидаемый эффект. Присоединяюсь к совету использовать скрипт .cmd.
Фар есть инструмент, а не нянька. © 2009 DrKnS

RDT
Posts: 4
Joined: Wed 06 Feb, 2019 10:29
Has thanked: 1 time

Копирование каталога и файлов на другой диск

Post by RDT » Thu 07 Feb, 2019 11:02

HaRT wrote:
Wed 06 Feb, 2019 12:49
мне даже не очевидно, что они будут иметь ожидаемый эффект
Однако эффект имеется. Более того, найдено такое решение:

Code: Select all

:  !.! !: -> !#!:
    @rem диск пассивной панели, куда будет скопирован каталог/файлы
    set dDisk=!#!:
    @rem активная панель - исходное размещение каталога\файла
    set cDiskPath=!\
    @rem путь размещения каталога\файла без указания диска
    set cPath=%cDiskPath:~3%
    @rem создать каталог для копирования
    md "%dDisk%\%cPath%!.!\"
    @rem копировать каталог/файлы из исходного размещения в требуемое размещение
    echo "!^!\!.!\*.*" "%dDisk%\%cPath%!.!\" >tempSTR
    FOR /F "tokens=1,2* delims=;" %I IN (tempSTR) DO (move /y %I)
    del tempSTR
без использования внешнего батника с параметрами. Вместо команды move, можно использовать и xcopy с параметрами.
У меня этот скрипт работает.

Yegor
Posts: 947
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 3 times
Been thanked: 12 times

Копирование каталога и файлов на другой диск

Post by Yegor » Thu 07 Feb, 2019 19:14

У меня вроде вот так работает:

Code: Select all

:    Test
     echo | set dDisk=!#!:
     echo | set cDiskPath=!\
     echo | set cPath=%cDiskPath:~3%
     echo | md %dDisk%\%cPath%!.!\
     echo | echo  "!^!\!.!\*.*" "%dDisk%\%cPath%!.!\*.*" /D /E /Y /R
     echo | xcopy "!^!\!.!\*.*" %dDisk%\%cPath%"!.!\*.*" /D /E /Y /R
EDIT: Правильнее заменить | на &, но для POC сойдет и так.
Last edited by Yegor on Thu 07 Feb, 2019 19:24, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

RDT
Posts: 4
Joined: Wed 06 Feb, 2019 10:29
Has thanked: 1 time

Копирование каталога и файлов на другой диск

Post by RDT » Fri 08 Feb, 2019 08:29

Спс за отклик. Но так почему-то не работает. Скрипт создаёт каталоги по названию переменных типа %dDisk%, "%dDisk%\%cPath%2019-01-17", с обрезками/частями нужного каталога и файлы не копирует.
В случае если заменить | на &, то скрипт работает только на исходном диске с тем же эффектом (каталоги %dDisk%, "%dDisk%\%cPath%2019-01-17), но файлы смог скопировать...
Может в базовых настройках фара или системных настройках что-то не так?
Пока остановился на своём решении - сохранение параметров копирования во временном файле tempSTR и вызов этих параметров через FOR ... DO.

Heir
Posts: 4
Joined: Wed 09 Jan, 2019 15:17
Has thanked: 3 times

Копирование каталога и файлов на другой диск

Post by Heir » Sat 09 Feb, 2019 23:05



Выделяем объект(ы) для копирования (или из под курсора) и нажимаем CtrlAltShift + Буква требуемого диска.

Для работы предустановленных, вполне удобных, ключей нужно из комстроки запустить Far:Config и параметр System.CASRule установить: "2 = 0x2" или применять другие ключи.
Attachments
Копирование каталога и файлов на другой диск.lua
(1.41 KiB) Downloaded 122 times

Post Reply

Return to “Нужна помощь”