4

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

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

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

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

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

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

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

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

3 ответа3

3

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

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

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

2

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

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

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

2

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

Вот пакетное решение, в котором 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .