4

Может ли кто-нибудь помочь в этом.

У меня есть mp3-файлы по всему магазину и, следовательно, много дубликатов.

Что мне нужно, так это функция командной строки, которая переместит все файлы типа mp3 в новую папку. Меня не беспокоит, сохраняется ли структура файлов в новой папке или нет.

Я мог бы легко скопировать, используя, например, копию c:*. Mp3 / sc:\mp3, но из-за количества файлов, которые у меня есть, у меня не хватило бы места на диске, копирующего их, следовательно, необходимо переместить.

Спасибо

4 ответа4

5

Попробуйте эту команду из папки верхнего уровня, где у вас есть mp3-файлы.

forfiles /M *.mp3 /C "cmd /c move @file C:\music"

Обратите внимание, что если у вас есть файлы с повторяющимися именами, перемещать их все в одну папку неправильно. Это приведет к потере данных.

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

forfiles /S /M *mp3 /C "cmd /c move @files C:\music

Это будет рекурсивно искать во всех папках в вашем текущем каталоге

Справка: команда Forfiles Windows

1

Если это не обязательно операция из командной строки, тогда вы можете просто воспользоваться окном поиска проводника. Откройте C:, найдите *.mp3 , нажмите Ctrl+A и переместите файлы. Вас спросят о дубликатах.

1

Как выполняется из командной строки:

for /r %M in (*.mp3) do @if /I "%~dpM" neq "c:\temp\mp3 files\" @echo move /-Y "%M" "c:\temp\mp3 files\"

Это просто выводит команды на экран, поэтому можно безопасно запускать и проверять, соответствует ли оно вашим потребностям. Он начнется с текущего каталога, поэтому, если вы хотите перечислить все, выполните его из c:\ .
Разумеется, название вашей директории назначения зависит только от вас, но убедитесь, что она существует! Вы также можете поместить его в переменную или в пакетный параметр, чтобы избежать ошибок при вводе. Когда вы на 100% уверены, что вывод правильный, просто удалите @echo , а затем протестируйте его снова с несколькими файлами / путями (не забудьте включить те, которые имеют пробелы и некоторые необычные символы)

Несколько слов предостережения:
1. Вы сказали, что у вас есть дупс. Я поставил /-Y в качестве меры безопасности, поэтому перемещение файла с тем же именем, что и уже перемещенное, остановит этот скрипт, ожидая подтверждения. Вы можете перезаписать это с помощью ключа /Y, но вы рискуете перезаписать больше, чем хотели!
2. Это едва ли обратимая или необратимая (если у вас есть «ложные» дубликаты - разные файлы с одинаковыми именами). Сделайте резервную копию, прежде чем начать!
3. Посмотрите, что у вас есть, прежде чем вы переедете - это даст вам список всех ваших mp3-файлов, красиво отформатированных с именем, размером и каталогом:
for /r %M in (*.mp3) do @echo "%~nxM", "%~zM", "%~dpM" >>filelist.txt
Используйте электронную таблицу для сортировки и проверки.

Заметки:
а) На самом деле вы могли бы удалить это, if часть вообще, как перемещение файла на себя не замечает, но я просто нахожу это грязным :-)
б) если вы хотите поместить его в пакет, замените один % на двойной %%

0

Я предполагаю, что это для резервного копирования или аналогичного. Если это так, я создал bat-файл и по расписанию запускает его раз в неделю.

Попробуйте сделать файл летучей мыши.

Откройте блокнот и введите

xcopy "file location" "file destination" /i /e /y /z

например

xcopy "c:\allmusic\mp3\" "e:\music\" /i /e /y /z

Сохраните файл как .bat (например, «copyFiles.bat»)

Вы можете иметь несколько строк, но по одной на строку. НАПРИМЕР

xcopy "c:\allmusic\mp3\" "e:\music\" /i /e /y /z
xcopy "c:\allmusic\wav\" "e:\music\" /i /e /y /z
xcopy "c:\allmusic\wmv\" "e:\music\" /i /e /y /z

Обратите внимание, что /i /y /e и /z имеют значения, которые могут быть желательными или нет (например, перезапись), см. Список здесь:

/A Copies only files with the archive attribute set, doesn't change the attribute.  
/M Copies only files with the archive attribute set, turns off the archive attribute.  
/D:m-d-y Copies files changed on or after the specified date. If no date is given, copies only those files whose source time is newer than the destination time.  
/EXCLUDE:file1[+file2][+file3]... Specifies a list of files containing strings. When any of the strings match any part of the absolute path of the file to be copied, that file will be excluded from being copied. For example, specifying a string like \obj\ or .obj will exclude all files underneath the directory obj or all files with the .obj extension respectively.  
/P Prompts you before creating each destination file.  
/S Copies directories and subdirectories except empty ones.  
/E Copies directories and subdirectories, including empty ones. Same as /S /E. May be used to modify /T.  
/V Verifies each new file.  
/W Prompts you to press a key before copying.  
/C Continues copying even if errors occur.  
/I If destination does not exist and copying more than one file, assumes that destination must be a directory.  
/Q Does not display file names while copying.  
/F Displays full source and destination file names while copying.  
/L Displays files that would be copied.  
/H Copies hidden and system files also.  
/R Overwrites read-only files.  
/T Creates directory structure, but does not copy files. Does not include empty  directories or subdirectories. /T /E includes empty directories and subdirectories.  
/U Copies only files that already exist in destination.  
/K Copies attributes. Normal Xcopy will reset read-only attribute  
/N Copies using the generated short names.  
/O Copies file ownership and ACL information.  
/X Copies file audit settings (implies /O).  
/Y Suppresses prompting to confirm you want to overwrite an existing destination file.  
/-Y Causes prompting to confirm you want to overwrite an existing destination file.  
/Z Copies networked files in restartable mode.   

Вы также можете использовать "переместить", который похож на вырезать и вставить

например

переместить "источник" "место назначения"

move "c:\allmusic\mp3\" "e:\music\" /i /e /y /z
move "c:\allmusic\wav\" "e:\music\" /i /e /y /z
move "c:\allmusic\wmv\" "e:\music\" /i /e /y /z

РЕДАКТИРОВАТЬ

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

for /f %%f in ('dir /b c:\')  do (
cd\
cd %%f
copy *.mp3 "e:\music"

for /f %%g in ('dir /b %%f')  do (
cd\
cd %%g
copy *.mp3 "e:\music"


for /f %%h in ('dir /b %%g')  do (
cd\
cd %%h
copy *.mp3 "e:\music"
pause
)
)
)

Обратите внимание, что это делает 3 уровня подпапок

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