3 / 3 / 0
Регистрация: 22.05.2013
Сообщений: 21
1

Копирование и перемещение в Командной строке

23.05.2013, 08:59. Показов 36550. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

Задача - перемещать из сетевой папки(test1) в локальную(test2) все файлы и папки которые появляются в сетевой время от времени. Реализация в CMD.

Мое решение - ниже написанный текст засунут в батник, () естественно не входят в батник.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
::(перемещение всех файлов из т1 в т2)
move D:\test1\*.* D:\test2
::(Копирование всех папок из т1 в т2 раньше еще стояло /-Y)
xcopy /V /D /S /E /H D:\test1 D:\test2
::(Удаление т1)
rmdir /s /q D:\test1
::(Создание т1 заново, которая получает почти все св-ва удаленной т1)
mkdir D:\test1
::(Полный доступ для всех к вновь созданной т1)
cacls D:\test1 /G все:f
ПРОБЛЕМА
Если в test1 скинули папку или файл которая уже есть в test2 то более новая просто заменяет существующую.
Особенно много папок с названием "Новая папка" и т.п. файлов. На юзеров надежды никакой, они так привыкли.

НЕОБХОДИМО
Чтобы новой папке или новому файлу присваивалось название+индекс, для того чтобы новое не заменяло старое.

P.S. Приветствуются и любые другие решения моей проблемы на включающие сторонние программы. Все либо в CMD либо внутренними силами Винды.

Не знаю надо ли это, но Винда везде стоит ХР, SP2
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2013, 08:59
Ответы с готовыми решениями:

Копирование нескольких файлов в Командной строке
Как произвести копирование сразу нескольких файлов в командной строке?

Вопросы по командной строке
Здравствуйте! У меня есть пару вопросов по командным файлам. Буду очень признателен если вы мне...

Вопрос по командной строке
Здравствуйте! Учусь на втором курсе по специальности «Информатика и выч. техника». У нас появился...

Крякозябры в командной строке
Всем доброго времени суток. Возникла следующая проблема: некорректно отображаются сообщения на...

19
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
23.05.2013, 18:40 2
Здесь по ссылке есть рекурсивная функция, если сами сможете прикрутить ее к своей задаче.
Перемещение файлов с заданным расширением со всего логического диска в создаваемый каталог
1
3 / 3 / 0
Регистрация: 22.05.2013
Сообщений: 21
24.05.2013, 12:56  [ТС] 3
Спасибо, попробую - может в процессе что-то свое всплывет, а может и Ваше смогу прикрутить. Направление понятно, дальше только практика

Добавлено через 6 часов 19 минут
Если заменить в Вашем коде верхушку таким образом -
Bash
1
2
::Искомое расширение файлов
Set Ext=*
От копируются ВСЕ файлы, причем даже если они в папках, но вот сами папки не копируются... с этим затык.
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
24.05.2013, 13:28 4
Нужно в части dir /b /s /a:-d убрать :-d
1
3 / 3 / 0
Регистрация: 22.05.2013
Сообщений: 21
26.05.2013, 15:28  [ТС] 5
Все работает. Перемещение из папки 1 в папку 2. Батник лучше засунуть в планировщик задач, на цикл в 10-15 минут. Вот окончательный код:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@echo off
::// В скрипт включена демонстрация поддержки файлов//папок с буквами украинского алфавита
Setlocal EnableDelayedExpansion
::Искомое расширение файлов
Set Ext=*.*
::Откуда копировать
Set From=D:\1
::Куда копировать
Set To=D:\2
 
if not exist "%To%" md "%To%"
 
chcp 1251>nul
Set LanguageFlag=true
 
::// Здесь я заменил -d на d чтобы каталоги учитывались и заменил copy на move, чтоб перемещать внутренности а не копировать.
for /f "delims=" %%A in ('dir /b /s /a:d "%From%\%Ext%"') do (
  if defined LanguageFlag (chcp 866>nul& Set LanguageFlag=)
  echo Found %%~A  
  Call :GetEmptyName "%To%" "%%~nxA" NewName
  Echo --^> %To%\!NewName!
  move "%%~A" "%To%\!NewName!" >nul
)
:://Здесь я убрал паузу, чтобы пользователь вообще ничего не замечал
:://pause
:://goto :eof
 
:GetEmptyName %1-Folder %2-FileName %3-Var.Return %4-Optional.System.Num
if "%~4"=="" (
    Set "NewFileName=%~2"
  ) else (
    Set "NewFileName=%~n2(%~4)%~x2"
)
if exist "%~1\%NewFileName%" (
    Set Num=%~4
    Set /A Num+=1
    Call :GetEmptyName "%~1" "%~2" "%~3" "!Num!"
  ) else (
    Set "%~3=%NewFileName%"
    Exit /B
)
Exit /B
2
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
29.05.2014, 12:52 6
Здравствуйте, а можно запустить под чистый dos данный код? если да то как
1
Модератор
Эксперт JS
5197 / 2079 / 406
Регистрация: 06.01.2013
Сообщений: 4,793
30.05.2014, 23:24 7
Glin, нет. Никак.
0
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 10
25.03.2019, 14:46 8
А что сюда добавить, чтобы и папки и файлы перемещал?

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@echo off
::// В скрипт включена демонстрация поддержки файлов//папок с буквами украинского алфавита
Setlocal EnableDelayedExpansion
::Искомое расширение файлов
Set Ext=*.*
::Откуда копировать
Set From=D:\1
::Куда копировать
Set To=D:\2
 
if not exist "%To%" md "%To%"
 
chcp 1251>nul
Set LanguageFlag=true
 
::// Здесь я заменил -d на d чтобы каталоги учитывались и заменил copy на move, чтоб перемещать внутренности а не копировать.
for /f "delims=" %%A in ('dir /b /s /a:d "%From%\%Ext%"') do (
  if defined LanguageFlag (chcp 866>nul& Set LanguageFlag=)
  echo Found %%~A  
  Call :GetEmptyName "%To%" "%%~nxA" NewName
  Echo --^> %To%\!NewName!
  move "%%~A" "%To%\!NewName!" >nul
)
:://Здесь я убрал паузу, чтобы пользователь вообще ничего не замечал
:://pause
:://goto :eof
 
:GetEmptyName %1-Folder %2-FileName %3-Var.Return %4-Optional.System.Num
if "%~4"=="" (
    Set "NewFileName=%~2"
  ) else (
    Set "NewFileName=%~n2(%~4)%~x2"
)
if exist "%~1\%NewFileName%" (
    Set Num=%~4
    Set /A Num+=1
    Call :GetEmptyName "%~1" "%~2" "%~3" "!Num!"
  ) else (
    Set "%~3=%NewFileName%"
    Exit /B
)
Exit /B
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
25.03.2019, 20:10 9
Цитата Сообщение от Maksi1311 Посмотреть сообщение
/a:d
заменить на /a
1
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 10
26.03.2019, 13:03 10
Спасибо огромное, все работает))

А возможно сделать так, чтобы это была не одна папка, а несколько? Пример:

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
::// В скрипт включена демонстрация поддержки файлов//папок с буквами украинского алфавита
Setlocal EnableDelayedExpansion
::Искомое расширение файлов
Set Ext=*.*
::Откуда копировать
Set From=D:\1; D:\3; D:\5 и тд.
::Куда копировать
Set To=D:\2; D:\4; D:\6 и тд.
Чтобы из D:\1 в D:\2; из D:\3 в D:\4; из D:\5 в D:\6 и тд.

Добавлено через 2 часа 52 минуты
Извиняюсь, что в одно сообщение не написал(((

И возможно ли такое, чтобы как то зациклить этот батник, к примеру, чтобы он постоянно работал и мониторил папки, раз что-то появилось, сразу переместил?
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
26.03.2019, 23:08 11
Цитата Сообщение от Maksi1311 Посмотреть сообщение
мониторил папки, раз что-то появилось, сразу переместил
это на powershell только.
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,114
26.03.2019, 23:51 12
Цитата Сообщение от alpap Посмотреть сообщение
это на powershell только.
Из консолей.
0
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 2
30.03.2020, 15:18 13
подскажите как в этом батнике организовать чтобы файлы имеющие в имени файла знаки "!", "?" не удалялись, пот ому что даный бат удаляет файли такие, например !внимание или !!!внимание

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@echo off
::// В скрипт включена демонстрация поддержки файлов//папок с буквами украинского алфавита
Setlocal EnableDelayedExpansion
::Искомое расширение файлов
Set Ext=*.*
::Откуда копировать
Set From=D:\1
::Куда копировать
Set To=D:\2
 
if not exist "%To%" md "%To%"
 
chcp 1251>nul
Set LanguageFlag=true
 
::// Здесь я заменил -d на d чтобы каталоги учитывались и заменил copy на move, чтоб перемещать внутренности а не копировать.
for /f "delims=" %%A in ('dir /b /s /a:d "%From%\%Ext%"') do (
  if defined LanguageFlag (chcp 866>nul& Set LanguageFlag=)
  echo Found %%~A  
  Call :GetEmptyName "%To%" "%%~nxA" NewName
  Echo --^> %To%\!NewName!
  move "%%~A" "%To%\!NewName!" >nul
)
:://Здесь я убрал паузу, чтобы пользователь вообще ничего не замечал
:://pause
:://goto :eof
 
:GetEmptyName %1-Folder %2-FileName %3-Var.Return %4-Optional.System.Num
if "%~4"=="" (
    Set "NewFileName=%~2"
  ) else (
    Set "NewFileName=%~n2(%~4)%~x2"
)
if exist "%~1\%NewFileName%" (
    Set Num=%~4
    Set /A Num+=1
    Call :GetEmptyName "%~1" "%~2" "%~3" "!Num!"
  ) else (
    Set "%~3=%NewFileName%"
    Exit /B
)
Exit /B
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
30.03.2020, 17:07 14
Удалить строчку:
Windows Batch file
1
Setlocal EnableDelayedExpansion
И заменить:
Windows Batch file
1
move "%%~A" "%To%\!NewName!" >nul
на
Windows Batch file
1
call move "%%%%~A" "%%To%%\%%NewName%%" >nul
1
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 2
30.03.2020, 18:52 15
вот такую дает ошибку и ничего не переносит
Dragokas
Миниатюры
Копирование и перемещение в Командной строке  
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
30.03.2020, 19:28 16
Замените еще:
Windows Batch file
1
Call :GetEmptyName "%~1" "%~2" "%~3" "!Num!"
на
Windows Batch file
1
Call Call :GetEmptyName "%%~1" "%%~2" "%%~3" "%%Num%%"
1
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
31.03.2020, 09:13 17

Не по теме:

Цитата Сообщение от alfred22 Посмотреть сообщение
файлы имеющие в имени файла знаки "!", "?"
"?" не может использоваться в именах файлов, если что



Добавлено через 14 секунд

Не по теме:

Цитата Сообщение от alfred22 Посмотреть сообщение
файлы имеющие в имени файла знаки "!", "?"
"?" не может использоваться в именах файлов, если что

0
5982 / 1991 / 323
Регистрация: 10.12.2013
Сообщений: 6,861
31.03.2020, 16:19 18
Цитата Сообщение от Joey Посмотреть сообщение
"?" не может использоваться в именах файлов, если что
понятно, что долго эти бабушкины запреты на 'неправильные символы' не проживут,
в Linux/Unix, например, можно всё, a смешение ОС идёт нешуточное, да и Windows shell сейчас настолько
изощрённа, что позволяет использовать WinAPI 'напрямую', а в WinAPI, как известно, знаки вопроса
в спецификациях файлов и устройств вполне себе легальны.

( разумеется, cmd тут не при делах )
1
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
03.04.2020, 09:19 19
volodin661, действительно, бабушкины) я так понимаю, это реликты служебных свойств управляющих символов и только, да? Тогда тоже предрекаю им смерть. Насчет смещения тож согласен, я бы сказал даже, что запоздали из-за упрямства и алчности микрософта и макоси
Цитата Сообщение от volodin661 Посмотреть сообщение
Windows shell сейчас настолько
изощрённа, что позволяет использовать WinAPI 'напрямую'
наконец-то...
0
5982 / 1991 / 323
Регистрация: 10.12.2013
Сообщений: 6,861
03.04.2020, 14:46 20
Цитата Сообщение от Joey Посмотреть сообщение
запоздали из-за упрямства и алчности микрософта и макоси

Про алчность MacOS я не понял )).

( учитывая тот факт, что ядро последней - это открытый BSD Unix и пользователь собственно за ОС не платит ни цента. )
0
03.04.2020, 14:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2020, 14:46
Помогаю со студенческими работами здесь

Графика в командной строке
Под водой. @echo off title Oo bubblesinblue oO setlocal enabledelayedexpansion color 9f...

Архив в командной строке
Здравствуйте!!! Учусь работать с командной строкой и вот какой вопрос: как создать архив из всех...

Задачи в командной строке
Ребята прошу помощи ! Нужно решить такую задачу в командной строке Заранее благодарен !

Ошибка в командной строке Telnet
Хочу войти в почту через telnet пишу: telnet smtp.mail.ru 25 EHLO mail.ru AUTH LOGIN А ответ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru