Пакетное перемещение содержимого папки на один уровень вверх

6629
HASJ

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

Структура каталогов выглядит следующим образом:

C:\Photos\subject\randomnumbers\images\file.ext

И я хочу закончить с:

C:\Photos\subject\randomnumbers\file.ext

Я пытался бежать, for /r %i in ("*\images\*.*") do move *\*.*но это не работает, как ожидалось.

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

Это возможно, и кто-нибудь может мне помочь с этим?

4
Если у вас есть тысячи файлов изображений и вы хотите ими управлять, возможно, вам следует потратить некоторое время на изучение [exiftool] (http://www.sno.phy.queensu.ca/~phil/exiftool/) ... Вы Вы добьетесь [того, что вы хотите] (http://www.sno.phy.queensu.ca/~phil/exiftool/#filename) и, вероятно, больше. Просто будьте осторожны и протестируйте копию перед применением к большому количеству файлов. techraf 8 лет назад 1
@techraf Ух, exiftool ДЕЙСТВИТЕЛЬНО мощен, судя по быстрому взгляду на его документацию! Буду читать больше, спасибо! HASJ 8 лет назад 0

3 ответа на вопрос

3
techraf

Это должно работать для вас:

for /r %i in ("images\*.*") do move %i %~pi.. 
  • %~piизвлекает путь из %i(заканчивая \)
  • .. после указанного выше пути указывает на родительский каталог

Конечно, это не обрабатывает ситуацию, когда у вас есть файлы с конфликтующими именами в подкаталогах.

Замечательно! Работает точно так, как ожидалось! Не могу поверить, что я забыл `% i` в моей первоначальной команде. Я также никогда бы не подумал об использовании `..`! Спасибо и спасибо всем, кто ответил! Надеюсь, что эти ответы помогут другим людям с похожими или разными вопросами! HASJ 8 лет назад 0
2
Aganju

Это не очень сложно, и я уверен, что люди найдут лучшие решения, но вот быстрое:

  1. Выполните простой (Explorer) поиск *, начиная с папки, в которую вы хотите переместить материал. Это может занять полминуты или около того, чтобы завершить.
  2. Сортировать результат по пути
  3. Выберите все файлы (которые вы хотите переместить), которые еще не находятся в целевой папке (это будут ваши существующие «тысячи каталогов». Они будут все вместе после сортировки, поэтому «нажмите» и «shift +» нажмите 'делает это.
  4. Перетащите их в дерево структуры папок слева и поместите в целевую папку.
  5. Получить кофе или сделать другую работу, пока он движется. Windows обычно может перемещать 40 - 7000 файлов в секунду, в зависимости от вашего оборудования.
  6. Выберите все - теперь пустые - каталоги и удалите их.

Обратите внимание, что вы также можете выполнить шаг 1 с фильтрами, если вы хотите, например, только определенные типы файлов *.jpg,*.png.

2
Pimp Juice IT

Пакетное перемещение содержимого папки на один уровень вверх

Вот пакетное решение, в котором MoveFromDir - это каталог, с которого вы запускаете содержимое, в котором вы будете перемещаться, а MoveToDir - это явный путь к каталогу, в котором это содержимое будет перемещено на один уровень выше от MoveFromDir, поэтому вам придется установить эти переменные соответственно.

Переместить все папки и файлы в MoveFromDir и ниже в MoveToDir

Обратите внимание, что работает только второй цикл FOR:

  • FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.jpg"')

Вы можете указать только те расширения файлов, которые вы хотите переместить в MoveToDir (например, jpg)

@ECHO ON  SET MoveToDir=C:\Photos\subject\randomnumbers SET MoveFromDir=C:\Photos\subject\randomnumbers\images  :: Move the folders from the move directory to the move to directory FOR /D %%A IN ("%MoveFromDir%\*") DO MOVE /Y "%%~A" "%MoveToDir%"  :: Move any remaining files (or folders) from the move directory to the move to directory FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.*"') DO MOVE /Y "%%~A" "%MoveToDir%\" GOTO EOF 

Дополнительные ресурсы