Выведите список подходящих файлов в .txt, затем переместите файлы, используйте txt для последующего возврата файлов в исходную папку - PullRequest
0 голосов
/ 22 июня 2019

На этот вопрос действительно есть 2 части:

  • У меня есть папка с файлами, которые мне нужно временно переместить в Новое место.
  • Однако позже мне нужно будет переместить файлы обратно в исходное место (а).

У меня есть одна папка, полная файлов и папок, которая выглядит следующим образом :

C:\VIDEO\My Video 1\My Video 1.mkv
C:\VIDEO\MyVideo2\MyVideo2.mkv
C:\VIDEO\My.Video.3\My.Video.3.mkv

Мне нужно:

1. Recursively find all *.mkv files within C:\VIDEO folder
2. Output a list of the existing Dir structure/file and folder names/paths to a .txt file
3. Then Move all *.mkv files from C:\VIDEO to another folder C:\Temp
(I do not want to retain the original folder structure during this move)

Позже мне нужно:

4. Search for all *.mkv files in C:\Temp
5. Use the .txt file to help move each *.mkv file back into their original location

Полагаю, для этого потребуется 2 отдельных пакетных файла.

Вот мой текущий прогресс:

@echo off
setlocal EnableExtensions EnableDelayedExpansion

:: Setup
set "SourcePath=C:\VIDEO"
set "DestPath=C:\Temp"

:: Output Items To Txt File
for /f "delims=\" %%A in ('dir "%SourcePath%"\*.mkv') DO echo "%SourcePath%">>"%DestPath%"\output.txt

:: Move Matching Items
for /f "tokens=*" %%a IN ('dir "%SourcePath%"\*.mkv') DO move /y "%SourcePath%\%%a" "%DestPath%"

Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Вы хотите переместить дерево в плоскую точку назначения (зная, что позже вы захотите переместить его назад и придется воссоздать дерево)?С какой стати это можно сделать ...

Но хорошо:

@echo off
set "SourcePath=C:\VIDEO"
set "DestPath=C:\Temp"
echo @echo off > MoveBack.bat
for /r "%SourcePath%" %%A in (*.mkv) do (
  ECHO move "%%~fA" "%DestPath%\"
  >> MoveBack.bat echo move "%DestPath%\%%~nxA" "%%~dpA"
)
echo done. To move them back, execute MoveBack.bat

Вместо записи перемещенных файлов в текстовый файл и последующей итерации по этому файлу, проще создатьсценарий «восстановления».

Для описания модификаторов %%~ прочитайте вывод for /?

ПРИМЕЧАНИЕ. Я отключил команду move по соображениям безопасности.Если вы уверены, что он работает должным образом, удалите ECHO.

Примечание. В дереве папок можно иметь повторяющиеся имена файлов.Этот скрипт не учитывает это (говоря: в этом случае вы можете потерять данные)

0 голосов
/ 23 июня 2019

Конечный продукт:

@echo on
set "SourcePath=H:\FIXED"
set "DestPath=H:\Temp"
echo @echo on > MoveBack.bat
for /r "%SourcePath%" %%A in (*.mkv) do (
  move "%%~fA" "%DestPath%\"
  >> MoveBack.bat echo move "%DestPath%\%%~nxA" "%%~dpA"
)
@echo done. To move them back, execute MoveBack.bat

сейчас работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...