С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/179: Рейтинг темы: голосов - 179, средняя оценка - 4.82
81 / 81 / 7
Регистрация: 07.12.2012
Сообщений: 540
1

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

05.09.2014, 13:06. Показов 34920. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Деньдобрый

Есть

Папка 1
Файл 1
Файл 2

Есть

Папка 2
Файл 1

( Файл 1 в каждой из папок одинаковый )

Как мне ПЕРЕМЕСТИТЬ ( любое копирование не подойдет xcopy\robocopy\Copy-item и проч ) так, что бы Файл 1 перезаписался новым, добавися Файл 2 и все файлы из Папка 1 пропали ?

Тоесть на выходе должно получиться так

Папка 1
Пустая

Папка 2
Файл 1
Файл 2

Куда копать ?(

дело в том, что там лежат файлы по 100ГБ, и мне нужно моментальное перемещение как если бы я делал CTRL+X
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2014, 13:06
Ответы с готовыми решениями:

Как переместить несколько заданных файлов из одной папки в другую?
Всем привет! Допустим, мне необходимо переместить файлы 1.pdf и 2.pdf в другую папку, как это...

Как скопировать файлы из одной папки в другую
Добрый вечер! Имеется проблема! Нужно скопировать из папки с неизвестном количеством файлов 10...

Перемещать файлы из одной папки в другую по 10 штук - BAT
Есть папка, в ней лежат файлы. Задача: переместить файлы из одной папки в другую папку по 10...

Вырезать файлы с пронумерованным именем из одной папки в другую на рабочем столе
Добрый день, Помогите составить простой скрипт который будет файлы с названием 1 2 3 и так до 30~...

14
Эксперт WindowsАвтор FAQ
18014 / 7715 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
05.09.2014, 14:45 2
Для всех файлов:

Bash
1
move /y "Папка 1\*" "Папка 2\"
Для конкретных двух:

Bash
1
2
move /y "Папка 1\Файл 1" "Папка 2\"
move /y "Папка 1\Файл 2" "Папка 2\"
1
81 / 81 / 7
Регистрация: 07.12.2012
Сообщений: 540
05.09.2014, 15:13  [ТС] 3
Спасибо за помощь

Но если:

Папка 1
Папка Ромашка
Файл 1
Файл 2

Папка 2
Папка Ромашка
Файл 1

move выдаст ошибку

А результат нужен таким

Папка 1

Папка 2
Папка Ромашка
Файл 1
Файл 2

все возможные перемещения не умеют работать с папками и подпапками я так понял... только копирование
0
3461 / 1999 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
05.09.2014, 16:14 4
Ошибок не будет:


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
 
set "source=Папка 1"
set "destination=Папка 2"
 
for /f "tokens=1,2 delims=:" %%i in ('attrib /d /s "%source%\*"') do (
 set var=%%i
 call set var=%%var:~3,2%%
 call set var=%%var:S=$s %%
 call set var=%%var:H=$h %%
 call attrib %%var:$=-%% "%source%\%%~nxj">nul
 move /y "%source%\%%~nxj" "%destination%">nul 2>&1
 call attrib %%var:$=+%% "%destination%\%%~nxj">nul
 )
 
exit /b

.
2
Эксперт WindowsАвтор FAQ
18014 / 7715 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
05.09.2014, 16:38 5
Не совсем понимаю, что ты делаешь дальше с атрибутами.
И что будет, если целевой папки для копирования файла из ветки вглубине не будет существовать.

Вариант с рекурсивным обходом папок из глубины к корню.
Файлы и папки с символом ! в имени обрабатываться не будут.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
set src=d:\2\runthis
set dest=d:\2\runthis2
 
call :inside "%src%"
md "%src%" 2>NUL
pause
goto :eof
 
:inside
  for /f "delims=" %%a in ('dir /ad /b "%~1\*"') do call :inside "%~1\%%a"
  set "x=%~1"
  set "x=!x:%src%=!"
  md "%dest%\!x!" 2>NUL
  move /y "%~1\*" "%dest%\!x!\" 2>NUL
  rd "%~1" 2>NUL
exit /B
1
3461 / 1999 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
05.09.2014, 17:10 6
Цитата Сообщение от Dragokas Посмотреть сообщение
И что будет, если целевой папки для копирования файла из ветки вглубине не будет существовать.
Dragokas, "ветки вглубине" затрагиваются только номинально для правильной работы команды "attrib" в разборе "for". Никакой рекурсии нет, просто перемещаются все (!) файлы и папки первого уровня вложения. Чтобы "чисто" номинальные (!) ошибки не смущали пользователя, выставлено "2>&1". Подчёркиваю:
Цитата Сообщение от ComSpec Посмотреть сообщение
Ошибок не будет
.
0
81 / 81 / 7
Регистрация: 07.12.2012
Сообщений: 540
05.09.2014, 18:01  [ТС] 7
Спасибо за ответы, может я что то не так описал...

Есть папка

H:\MOVE\FROM

Есть папка назначения

H:\MOVE\TO

В каждой папке есть папка BACKUP как на скринах, после отработки скрипта, ничего не происходит
Миниатюры
Переместить файлы из одной папки в другую   Переместить файлы из одной папки в другую   Переместить файлы из одной папки в другую  

0
81 / 81 / 7
Регистрация: 07.12.2012
Сообщений: 540
05.09.2014, 18:13  [ТС] 8
Dragokas, Сработало
0
3461 / 1999 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
05.09.2014, 18:14 9
Liksx, уберите слеш: не
Bash
1
set "source=H:\MOVE\FROM\"
, а
Bash
1
set "source=H:\MOVE\FROM"
!
1
81 / 81 / 7
Регистрация: 07.12.2012
Сообщений: 540
05.09.2014, 18:24  [ТС] 10
Хотя если

H:\MOVE\FROM
BACKUP
H:\MOVE\TO
BACKUP

То файлы правильно переносятся

НО если СТРУКТУРА различается

H:\MOVE\FROM
BACKUP
H:\MOVE\TO
BACKUP
Файл1

то данные переносятся из H:\MOVE\FROM в папку !x! что не очень тру.....

и получается

H:\MOVE\TO
BACKUP
Файл1
!x! - сюда переехали ВСЕ файлы из ->

H:\MOVE\FROM
BACKUP

Добавлено через 2 минуты
ComSpec,
Спасибо за ответы

я уже попробовал так, все равно не переносит ...

Добавлено через 5 минут
Вообщем задача простая ....

Есть
Набор папок и файло в D:\TEST
Есть набор папок и файлов в D:\TEST2
Структура папок может совпадать или файлы могут быть одинаковые...

Если я делаю CTRL+X то система начинает переносить, при совпадение спрашивает мол там уже есть файл заменить ли? и тп... вообщем CTRL+X решает проблему

Мне нужно зеркально CTRL+X только в CMD....

Скрипт и правда работает, который предложил Dragokas,
Но если структура папок не идентичная в Source и ******ation то все файлы перенесутся в !x! из Source....
0
3461 / 1999 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
05.09.2014, 22:56 11
Liksx, а почему Вам не походит "robocopy" с параметром "/move"? Ведь это то же самое, что Вы хотите сделать.
0
81 / 81 / 7
Регистрация: 07.12.2012
Сообщений: 540
06.09.2014, 10:56  [ТС] 12
ComSpec,
Любые копи как я и писал, не делают CTRL+X они ПО ЧЕСТНОМУ копируют..... даже с MOVE
Сами попробуйте и увидите, что даже с ключем MOVE робокопи будет КОПИРОВАТЬ, а не перемещать
0
3461 / 1999 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
06.09.2014, 13:00 13
Лучший ответ Сообщение было отмечено Liksx как решение

Решение

Liksx, попробуйте так:


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
 
set "source=Папка 1"
set "destination=Папка 2"
 
for /f "delims=" %%i in ('dir /b/s "%source%"') do (
 set var=%%i
 for /f "delims=" %%j in ('call echo "%%var:*%source%\=%%"') do (
  if exist "%%i" (
   if not exist "%destination%\%%~j\" (
    move /y "%%i" "%destination%\%%~j">nul
    )
   )
  )
 )
for /f "delims=" %%i in ('dir /ad/b "%source%"') do (
 rd  /s/q "%source%\%%i"
 )
 
exit /b

.
0
81 / 81 / 7
Регистрация: 07.12.2012
Сообщений: 540
06.09.2014, 16:57  [ТС] 14
Спасибо, работает
0
0 / 0 / 0
Регистрация: 30.03.2017
Сообщений: 1
30.03.2017, 05:06 15
Запускаю из портативной (путь заранее неизвестен) папки move.bat, в котором прописано:
Bash
1
for /r %%i in (out\*) do move %%i %%~pi\..\
Нужно чтобы из папки out (которая лежит там же где и батник) все ФАЙЛЫ и ПАПКИ (включая файлы в подпапках), перенесло на уровень выше, т.е. туда, где лежит этот move.bat, сохраняя структуру каталогов (с заменой файлов).

Этот батник делает что-то немного не то, не получается добиться цели. Помогите пожалуйста, второй день не сплю.

Добавлено через 6 минут
Получилось сделать так:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
 
set "source=out"
set "destination=."
 
for /f "delims=" %%i in ('dir /b/s "%source%"') do (
 set var=%%i
 for /f "delims=" %%j in ('call echo "%%var:*%source%\=%%"') do (
  if exist "%%i" (
   if not exist "%destination%\%%~j" (
    move /y "%%i" "%destination%\%%~j">nul
    )
   )
  )
 )
for /f "delims=" %%i in ('dir /ad/b "%source%"') do (
 rd  /s/q "%source%\%%i"
 )
exit /b
Добавлено через 6 минут
Только папку out не удаляет. Как сделать?
Bash
1
2
3
 
rd  /s/q "%source%"
rmdir out /S /Q
Не реагирует.

Добавлено через 12 минут
Разобрался, надо было вынести
Bash
1
 rd /s/q "%source%"
за цикл. То есть после for .. do ( ... )
0
30.03.2017, 05:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2017, 05:06
Помогаю со студенческими работами здесь

Переместить файлы из одной папки в другую
Добрый день, подскажите пожалуйста, как мне извлечь фалы с одной папки допустим в папку на диске С?

Переместить файлы из одной папки в другую
Всем привет, необходимо перенести все файлы из папки1(поиск во всех подкаталогах) в папку2 на...

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

Переместить папки из одной директории в другую
Здравствуйте уважаемые форумчани. Суть проблемы:Никак не могу программно переместить папки из...


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

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