2015-01-27 4 views
0

Мне нужна командная команда, которая будет искать вложенные папки каталога и найти частичное имя файла. Если этот файл существует, переместите этот каталог, иначе оставьте его в покое.Пакетная команда для проверки частичного имени файла, а затем перемещение

У меня есть папка, полная фильмов:

D:\Movies\movie1\ 
     \movie2\ 
     \movie3\ 

В пределах каждой папки фильма я хотел бы знать, если он имеет прицеп, загруженный в папку, если да, то переместить этот каталог в x:\movies. Я говорю о частичном имени файла, так как каждый файл трейлера будет включать название фильма с добавлением «-trailer» (f.e. The Interview (2014)-trailer).

ответ

0

Давай искать решение с Windows, CLI (Command Line Interpreter) с -> строкой с помощью An A-Z Index of the Windows CMD command line и следующего сценарий:

->tree d:\test\movies 
D:\TEST\MOVIES 
├───movie1 
├───movie2 
├───movie3 
└───movie4 

->tree d:\test\xmovies 
D:\TEST\XMOVIES 
No subfolders exist 

->dir /B /S /A-D "d:\test\movies" 
d:\test\movies\movie1\The View (2014)-trailer missing.rtf 
d:\test\movies\movie2\The Interview (2014)-trailer.bat 
d:\test\movies\movie2\The Interview (2014)-trailer.bmp 
d:\test\movies\movie2\The Interview (2014)-trailer.txt 
d:\test\movies\movie3\An Interview (2014)-trailer.bmp 

Чтобы найти все эти файлы в MOVIES вложенном с -trailer добавляется в конце имени файла предшествующим . расширения файла:

->dir /B /S /A-D "d:\test\movies\*-trailer.*" 
d:\test\movies\movie2\The Interview (2014)-trailer.bat 
d:\test\movies\movie2\The Interview (2014)-trailer.bmp 
d:\test\movies\movie2\The Interview (2014)-trailer.txt 
d:\test\movies\movie3\An Interview (2014)-trailer.bmp 

Чтобы получить папку только имена:

->for /F "tokens=*" %G in ('dir /B /S /A-D "d:\test\movies\*-trailer.*"') do @echo %~dpG 
d:\test\Movies\movie2\ 
d:\test\Movies\movie2\ 
d:\test\Movies\movie2\ 
d:\test\Movies\movie3\ 

Но здесь movie2 не один раз! И, кроме того, команда move не позволяет исходный каталог с обратной косой черты:

->move "D:\test\Movies\movie4\" "D:\test\xMovies\" 
The system cannot find the file specified. 

->move "D:\test\Movies\movie4" "D:\test\xMovies\" 
     1 dir(s) moved. 

Поэтому нам нужно переключаться с оболочкой Windows (CLI) для пакетного сценария. Создать файл 28167824.bat (например, с notepad и сохранить его в D:\bat\StackOverflow папку):

@ECHO OFF >NUL 
@SETLOCAL enableextensions disabledelayedexpansion 
for /F "tokens=*" %%G in (
    'dir /B /S /A-D "d:\test\movies\*-trailer.*"' 
) do (
    set "rawfolder=%%~dpG" 
    if exist "%%~dpG" call :moveDir 
) 
:endlocal 
@ENDLOCAL 
goto :eof 

:moveDir 
    set "srcfolder=%rawfolder:~0,-1%" 
    `enter code here`echo move "%srcfolder%" "d:\test\xMovies\" 
    rem move "%srcfolder%" "d:\test\xMovies\" 
goto :eof 

Запустить пакетный скрипт, шаблон последующих move команд такая же, как и в этой успешной move команды упоминалось выше:

->D:\bat\StackOverflow\28167824 
move "d:\test\Movies\movie2" "d:\test\xMovies\" 
move "d:\test\Movies\movie2" "d:\test\xMovies\" 
move "d:\test\Movies\movie2" "d:\test\xMovies\" 
move "d:\test\Movies\movie3" "d:\test\xMovies\" 

Bingo! Теперь мы можем удалить rem до того move "%srcfolder%" "d:\test\xMovies\", сохраните скрипт и запустите его:

->D:\bat\StackOverflow\28167824 
move "d:\test\Movies\movie2" "d:\test\xMovies\" 
     1 dir(s) moved. 
move "d:\test\Movies\movie3" "d:\test\xMovies\" 
     1 dir(s) moved. 

А вот окончательная конфигурация, см сценарий запуска:

->tree d:\test\movies 
D:\TEST\MOVIES 
└───movie1 

->tree d:\test\xmovies 
D:\TEST\XMOVIES 
├───movie2 
├───movie3 
└───movie4