1 (изменено: obse, 2012-07-31 00:53:57)

Тема: CMD/BAT: Поиск по маске, копирование, переименование

Доброго времени суток Уважаемые.
Перечитал все темы и понял, что я ничего не понял. Пытался сам создать батник, но явно я в этом ничего не понимаю. Прошу помочь написать код для следующей задачи:
Бат-файл запускается с любого места на компе. Необходимо найти все файлы на компьютере (диски c,d,e,f,....) по маске (*.txt - маска будет меняться периодически ручками) и скопировать их на диск D:\test\, при этом надо учесть, чтоб повторяющиеся имена файлов переименовывались примерно так: doc.txt, doc(1).txt, doc(2).txt,...... и не копировалась повторно сама же папка D:\test\. Желательно, чтоб при запуске батника окно сворачивалось в панель задач.


P.S. Поиском пользоваться умею и похожие темы читал, но не укладывается это в моей голове, извините. Спасибо.

2

Re: CMD/BAT: Поиск по маске, копирование, переименование

obse, прочтите Правила форума. Прочтите это. Я поправил оформление Вашего поста.

Обратите внимание на правило: «один вопрос — одна тема».

3

Re: CMD/BAT: Поиск по маске, копирование, переименование

Спасибо за замечания, одну задачу снял с сообщения. Прочитал правила и вторую тему относительно заголовка. С заголовком думал ветка языка программирования подставится автоматом, ну а в теле сообщения без помощи мне не обойтись. Сорри.

4 (изменено: obse, 2012-07-31 11:40:53)

Re: CMD/BAT: Поиск по маске, копирование, переименование

alexii, я видел на форуме вы с похожим сталкивались, может посмотрите, что не так. С переменными у меня вообще все сложно. Вот пытаюсь что-то делать, но не уверен.

@echo off
md d:\test
xcopy /y /h "C:\, D:\, E:\, F:\ *.txt" "d:\test"
pause

Думаю уже тут есть ошибки, не работает. А с заменой имен по счетчику совсем не понимаю.

5

Re: CMD/BAT: Поиск по маске, копирование, переименование

Пока топчусь на месте, решения нет.

6

Re: CMD/BAT: Поиск по маске, копирование, переименование

Я вобще не слышал о копировании с переименованием дублей стандартными средствами XCOPY.

Я бы попробовал организовать это дело архивированием с хранением нескольких версий файла. Например, архиватором WinRAR такое можно сделать, см.его хэлп.

WBR. Roman

7

Re: CMD/BAT: Поиск по маске, копирование, переименование

obse
Тут на vbs могу сделать. На cmd лень..

8

Re: CMD/BAT: Поиск по маске, копирование, переименование

При тестировании встречались такие пути: C:\Users\User\AppData\Local\Mozilla\Firefox\Profiles\u0j93lbe.default\Cache\B\* в результате чего появлялось сообщение: Не удается найти указанный файл. Это сообщение генерируется при копировании так что на него можно не обращать внимания так как батник работает дальше без проблем.

@echo off
if "%1"=="" goto :help
if "%2"=="" goto :help

set rashirenie=%1
set target=%2

for %%f in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( call :copyfind %%f)
goto :exit

rem ##########################################################
:copyfind
cd %~1:\ 
if %errorlevel% == 0 ( 
    for /r %~1:\ %%i in (dir *.%rashirenie% /B /A-D) do @if exist "%%i" (if not "%%i" == "%~fnx0" (if not "%%~dpi" == "%target%" ( call :chekcopy "%%i" 1 "%%i")))
)
exit /b 0
rem ##########################################################


rem ##########################################################
:chekcopy
if %ERRORLEVEL% GTR 0 exit /b 0

if not exist "%target%%~nx1" ( 
    copy "%~f3" "%target%%~nx1"
    exit /b 7 ) 

set newfile=%~n1
set /a count=%~2+1
set /a countold=%~2-1
    
if "%newfile:~-3%"=="(%countold%)" (
    call :chekcopy "%~dp1%newfile:~0,-3%(%~2)%~x1" %count% %3
    exit /b 7
    )

if "%newfile:~-3%"=="(%~2)" ( 
    call :chekcopy "%~dp1%newfile:~0,-3%(%count%)%~x1" %count% %3
    exit /b 7
    )

call :chekcopy "%~dp1%newfile%(%~2)%~x1" %count% %3
exit /b 0
rem ##########################################################

rem ##########################################################
:help
echo Использование: %~nx0 bat C:\1_test\
echo Расширение указывать без точки, только 3 буквы: doc или txt или bat или xls и т.д.
echo При указании директории куда будут копироваться найденные файлы указывайте полный путь. Букву диска указывайте с большой буквы.
echo.
echo Описание: Пакетный файл ищет файлы по задонному расширению на дисках от C до Z и копирует их в заданную директорию. Если в директории уже есть файлы 
echo с таким же именем то он их копирует с добавлением номера (вот так (1), (2), (3)) Если файлов с динаковым именем больше 10 то 
echo переименование получит вид: имя файла (10)(11). Надеюсь у вас такого не будет :)
echo.
echo Внимание! Если в вашей системе есть кард ридер то возможно появление сообщения что устройство не готово, просто нажмите кнопку продолжить в окне и все, так было у меня.
exit /b 0
rem ##########################################################
:exit