nerutatarin
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору cls @echo off title Поиск файлов по заданной маске ::===========Присваиваем переменные====================== ::Маска Set /p mask="Введите расширение файла для поиска: *." ::Название папки Set dirname=%mask%_files ::Путь до конечной папки Set Kuda=C:\%dirname% ::======================================================= ::Проверяем наличие папки с таким же названием (dirname) If not Exist "%kuda%\*.*" md %kuda% setlocal enabledelayedexpansion set /p choice=Искать на всех дисках (0) или на одном (1)? (0/1) if "%choice%"=="0" set NameDisk="C:\* D:\* E:\* F:\* G:\* H:\* I:\* J:\* K:\* L:\* M:\*" if "%choice%"=="1" ( set /p NameDisk="Введите букву диска:" set NameDisk="!NameDisk!:\*" ) echo ----------------------------------------------------- echo -- Внимание! При выборе "переместить" -- echo -- будет произведено удаление старых копий файлов -- echo ----------------------------------------------------- set /p choice=Переместить (0) или Скопировать (1)? (0/1) if "%choice%"=="0" set MC="xcopy /v/q/h/y" if "%choice%"=="1" set MC="xcopy /v/q/h/y/z" echo ------------------------------------------------------------- echo -- Производить операции с файлами следует с СОХРАНЕНИЕМ -- echo -- структуры каталогов (каждый файл находиться в той -- echo -- папке в которой он был изначально, до перемещения) -- echo -- или БЕЗ СОХРАНЕНИЯ (все, найденные файлы скидать в -- echo -- одну папку, при этом последующий файл со схожим именем -- echo -- будет затирать предыдущий)? -- echo ------------------------------------------------------------- set /p choice=Не сохранять структуру (0) или сохранять (1)? (0/1) if "%choice%"=="0" goto NoSaveStruct if "%choice%"=="1" goto SaveStruct ::====================Искать на всех дисках========================================================== ::без сохранения исходной структуры каталогов :NoSaveStruct echo Идет поиск файлов, дождитесь окончания. Окно само закроется. for /d %%a in (%NameDisk:~1,-1%) do if /i not "%%a"=="%kuda%" if /i not "%%a"=="%WINDIR%" if /i not "%%a"=="%ProgramFiles%" ( pushd "%%a\" && (for /f "delims=" %%A in ('"dir /b/s/a-d *.%mask% 2>Nul"') do ( %MC:~1,-1% "%%A" "%kuda%">Nul && if /i %MC%=="xcopy /v/q/h/y" del /f/q "%%A") popd)) for /f "usebackq delims=:\*" %%i in ('%NameDisk:~1,-1%') do ( xcopy /c/q/h/y "%%i:\*.%mask%" "%kuda%">Nul && if /i %MC%=="xcopy /v/q/h/y" del "%%i:\*.%mask%" ) EndLocal) exit ::с сохранением исходной структуры каталогов :SaveStruct echo Идет поиск файлов, дождитесь окончания. Окно само закроется. for /d %%a in (%NameDisk:~1,-1%) do if /i not "%%a"=="%kuda%" if /i not "%%a"=="%WINDIR%" if /i not "%%a"=="%ProgramFiles%" ( pushd "%%a\" && (for /f "delims=" %%A in ('"dir /b/s/a-d *.%mask% 2>Nul"') do ( %MC:~1,-1% "%%A" "%kuda%%%~pA">Nul && if /i %MC%=="xcopy /v/q/h/y" del /f/q "%%A") popd)) for /f "usebackq delims=:\*" %%i in ('%NameDisk:~1,-1%') do ( xcopy /c/q/h/y "%%i:\*.%mask%" "%kuda%\%%i\">Nul && if /i %MC%=="xcopy /v/q/h/y" del "%%i:\*.%mask%" ) EndLocal) Собственно вот что мне удалось сделать, с помощью гугла конечно. выше постом я уже говорил что мне нужно...повторюсь из переменно NameDisk убрать символы :\* только тамгде выделено ЖИРНЫМ шрифтом. эта же переменная используется в другом месте выделено КУРСИВОМ, здесь мне как раз эти символы нужны, вот. Может у кого есть более рациональные идею на этот счет, помогите. |