Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение Папки с файлами

Ответить
Настройки темы
CMD/BAT - [решено] Перемещение Папки с файлами

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте уважаемые!
помогите пожалуйста, нужен батник для перемещение папки с файлами
например: нужно переместить папку C:\UTM\transporter\transportDB D:\Server\Fasa2\UTM\transporter

Отправлено: 12:52, 17-02-2019

 
mwz mwz вне форума

Аватара для mwz

Ветеран


Contributor


Сообщения: 8055
Благодарности: 1937

Профиль | Сайт | Отправить PM | Цитировать


Вариант (если папка назначения уже существует и в ней есть файлы с теми же именами, что перемещаются сюда — то будет появляться запрос на замену таких файлов; для замены без подтверждения, как и для замены файлов с атрибутом "только для чтения", потребуются дополнительные ключи для команды xcopy):
Код: Выделить весь код
setlocal
set sourcedir=C:\UTM\transporter\transportDB
set destdir=D:\Server\Fasa2\UTM\transporter
if not exist "%destdir%\nul" md "%destdir%"
xcopy "%sourcedir%" "%destdir%\" /E /H /K
REM RD /S /Q "%sourcedir%"
Комментарий REM в последней строке, где должна удаляться исходная папка, поставлен временно: только для отладки; когда будет убеждение, что батник работает нормально — удалить слово REM и пробел после него.

Ну и для подавления вывода на экран можно добавить первой строкой: @echo off.

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 17-02-2019 в 14:01.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:54, 17-02-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


mwz спасибо, все сработало, вложенные папки и файлы скопированы а старая папка удалена!

Отправлено: 19:30, 17-02-2019 | #3


Пользователь


Сообщения: 66
Благодарности: 3

Профиль | Отправить PM | Цитировать


А зачем nul после
Код: Выделить весь код
if not exist "%destdir%\nul"
?
Какая у него функция?

Отправлено: 21:28, 18-02-2019 | #4

mwz mwz вне форума

Аватара для mwz

Ветеран


Contributor


Сообщения: 8055
Благодарности: 1937

Профиль | Сайт | Отправить PM | Цитировать


Цитата Patroklos:
А зачем nul после »
Это я ещё с давних времён такую конструкцию использую: определить, существует ли папка.

Поскольку в каждой существующей папке можно обратится к псевдофайлу nul, то если папка существует — то и файл этот будет найден, а если папки такой нет — то и псевдофайл найден не будет.

Сейчас определение существования конкретной папки делается проще — но приведённая конструкция универсальна и работает хоть в Windows 3.1, хоть в Windows 10.

-------
Mikhail Zhilin

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:52, 18-02-2019 | #5


Ветеран


Сообщения: 796
Благодарности: 280

Профиль | Отправить PM | Цитировать



mwz,
можете пояснить как это работает, когда возможно что "A\nul" существует?
Код: Выделить весь код
@echo off
if exist "A\nul" (echo "A\nul") else (echo Not "A\nul")
echo:
if exist "A" (echo "A") else (echo Not "A")
pause>nul
1.jpg
2.jpg
одновременно с одним именем папку и файл без расширения в одной директории не разместить.
безо всякого вреда создать папку без вопросов (если есть) проще так: 2>nul md A, но опять же при наличии файла без расширения с именем A (или а) папка тоже не будет создана, но ошибки не будет выведено, естественно.

Последний раз редактировалось alpap, 18-02-2019 в 23:19.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:04, 18-02-2019 | #6

mwz mwz вне форума

Аватара для mwz

Ветеран


Contributor


Сообщения: 8055
Благодарности: 1937

Профиль | Сайт | Отправить PM | Цитировать


alpap, хм... Спасибо!

Насчёт файла и папки с одинаковым именем понял, учту (мог и не учесть в других случаях; здесь же при использовании \nul предполагалось, что проверено будет наличие именно папки).

И придётся менять свои воззрения: значит nul теперь не во всех конструкциях может быть использован (благо в данном случае к проблемам не привело)...

А файл и папка, скажем, A, тогда при проверке должны разделяться проверкой существования A\ и A , причём для проверки наличия папки достаточно проверить наличие только A\, а файла — наличие A при отсутствии A\

Я вроде правильно понял?

-------
Mikhail Zhilin


Отправлено: 00:42, 19-02-2019 | #7


Ветеран


Contributor


Сообщения: 1524
Благодарности: 895

Профиль | Отправить PM | Цитировать


mwz, alpap,
Цитата mwz:
if not exist "%destdir%\nul" md "%destdir%" »
Эта конструкция не рабочая. Без nul работает
Вот тестовый батник
Код: Выделить весь код
@Echo Off
cls
	Set "destdir=Z:\kuku1"
	2>nul Rd /S /Q %destdir%
	If Not Exist "%destdir%\nul" (md "%destdir%" &Echo kuku11)
	If Not Exist "%destdir%\nul" (md "%destdir%" &Echo kuku12)
Echo -------------------------------------------------
	Set "destdir=Z:\kuku2"
	2>nul Rd /S /Q %destdir%
	If Not Exist "%destdir%" (md "%destdir%" &Echo kuku21)
	If Not Exist "%destdir%" (md "%destdir%" &Echo kuku22)
pause
GoTo :Eof
Вот результат

Код: Выделить весь код
kuku11
Подпапка или файл Z:\kuku1 уже существует.
kuku12
-------------------------------------------------
kuku21
mwz, А удалять папку RD /S /Q "%sourcedir%" это крайне опрометчиво: допустим, xcopy не все файлы скопировал (например, места не хватило или путь недоступный указан).
Надо поберечься. Вот вариант решения. Непустые папки удалены не будут
Код: Выделить весь код
@Echo Off
	Set "FoldIn=C:\UTM\transporter\transportDB"
	Set "FoldOut=D:\Server\Fasa2\UTM\transporter"
	
	Call :FileMove "%FoldIn%" "%FoldOut%"
	For /F "usebackq delims=" %%i In (`2^>nul Dir "%FoldIn%" /B /S /A:D ^|Sort /R`) Do 2>nul Rd "%%i" 
	2>nul Rd "%FoldIn%"
GoTo :Eof

:FileMove
	If Not Exist "%~2\%~nx1" Md "%~2\%~nx1"
	FOR /F "usebackq delims=" %%f IN (`2^>nul Xcopy /H /E /R /D /F %1 "%~2\%~nx1\"`) DO (
		Set "SS=%%f"
		Call :Xdel "%%SS: -> =" "%%"
	)
Exit /B

:XDel
	If Exist %2 Del %1
GoTo :Eof

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


Последний раз редактировалось megaloman, 19-02-2019 в 01:46.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:53, 19-02-2019 | #8


Ветеран


Сообщения: 796
Благодарности: 280

Профиль | Отправить PM | Цитировать


Цитата mwz:
для проверки наличия папки достаточно проверить наличие только A\, а файла — наличие A при отсутствии A\ »
так работает

Отправлено: 01:51, 19-02-2019 | #9


Ветеран


Contributor


Сообщения: 24033
Благодарности: 6980

Профиль | Отправить PM | Цитировать


Самым правильным будет проверка существования как целевого каталога, так и одноимённого с ним файла, потому для каталога используем имя «"%destdir%\."», для файла — чистый «"%destdir%», потому как а) кроме каталога %destdir% там может существовать и файл %destdir%, б) точка — реально существующее в каталоге файловой системы имя каталога, ссылающееся на сам этот каталог, равно как «..» — ссылка на родительский каталог. «.» существует в любом каталоге, в том числе и в корневом, «..» — существует в любом каталоге, кроме корневого.

Update: собственно, коллеги выше уже всё разжевали. Когда-нибудь я научусь сначала дочитывать тему до конца, и только потом «кидаться в бой» .
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:54, 19-02-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение Папки с файлами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Создать zip архив папки с подпапками и файлами без корневой папки blackeangel Программирование в *nix 1 02-02-2017 10:31
Папки с файлами сами удалились RusW Флейм 4 20-11-2015 20:13
7 / 2008 R2 - Перемещение папки Users в Windows 7 bab00n Автоматическая установка Windows 10 / 8 / 7 / Vista 28 17-03-2015 12:11
CMD/BAT - Групповое перемещение папок с файлами. DimaKitov Скриптовые языки администрирования Windows 2 15-08-2014 16:01
Разное - [решено] Перемещение папки Users nikkor7 Microsoft Windows Vista 2 13-04-2009 11:58




 
Переход