Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск файла на всех дисках и замена (http://forum.oszone.net/showthread.php?t=253035)

4zz 02-02-2013 21:13 2081185

Поиск файла на всех дисках и замена
 
Уважаемые знатоки!
Помогите решить задачу:
Нужен bat файл со следующими условиями- найти на всех дисках файл "dacha.exe" и заменить их на аналогичный из запускаемой папки.
Спасибо! :)

zion87 02-02-2013 21:50 2081217

Код:

@echo off
set direct="%~dp0"
for %%z 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 (
  for /f "delims=*" %%H in ('dir /s /b /a-d "%%z:\dacha.exe" ^|Findstr /bev /c:%direct%dacha.exe') do call :1 "%%~dpH"
)
goto:eof
:1
copy /y %direct%dacha.exe %1


megaloman 02-02-2013 22:35 2081252

Еще вариант
Код:

@Echo Off

Set NameFile=dacha.exe
Set From="%~dp0%NameFile%"

for %%d 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 If Exist %%d:\*.* (
        FOR /F "usebackq delims=" %%f IN (`dir /s /b /a-d "%%d:\%NameFile%" 2^>nul`) DO (
                    Echo %%f               
                    Copy %From% "%%f" >nul
        )
)


4zz 02-02-2013 22:48 2081262

СпасибО!

4zz 03-02-2013 00:38 2081306

А как будет если заменить на daSha.exe ? из этой же директории :)

zion87 03-02-2013 00:49 2081310

надо заменить daSha.exe в той же директории где мы нашли файл dacha.exe?

если да то изменяем строку
Код:

copy /y %direct%dacha.exe %1
на
Код:

copy /y %direct%da*.exe %1
или вообще
Код:

copy /y %direct%*.exe %1
или добавить
Код:

copy /y %direct%dacha.exe %1
copy /y %direct%daSha.exe %1


4zz 03-02-2013 01:13 2081321

zion87,
Не получается -взял 2 разных файла - один dacha.exe другой daSha.exe
Цитата:

Цитата zion87
Код:
@echo off
set direct="%~dp0"
for %%z 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 (
for /f "delims=*" %%H in ('dir /s /b /a-d "%%z:\dacha.exe" ^|Findstr /bev /c:%direct%dacha.exe') do call :1 "%%~dpH"
)
goto:eof
:1
copy /y %direct%dacha.exe %1 »

и выдает:
Имя папки c:\Documents and Settings\Администратор\Local Settings\Application Dat
a\Xenocode\Sandbox\Corel Graphics Applications\15.0.0.486\2010.06.14T18.54\Virtu
al\MODIFIED\@APPDATACOMMON@\Corel\Messages\540215253_807001\EN\MessageCache1\Wor
kflow\shared\Images\installoption слишком длинно.
Запускал из папки на раб.столе.
:(
А может надо по другому-я вообще-то хотел заменить самораспаковывающийся архив dacha.exe, запущенный, допустим с раб.стола, который при запуске распаковывает во временную директорию файл daSha.exe и данный батник и запускает его.

zion87 03-02-2013 01:43 2081328

если архив sfx то можно задать ему и папку расположения и что он должен сделать до и после распаковки

zion87 03-02-2013 02:03 2081333

вот так надо попробовать
Код:

@echo off
set direct="%~dp0"
for %%z 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 (
  for /f "delims=*" %%H in ('dir /s /b /a-d "%%z:\dacha.exe" ^|Findstr /bev /c:%direct%dacha.exe') do call :1 "%%~sH"
)
goto:eof
:1
echo %1
copy /y %direct%dacha.exe %1

замена пути короткими именами )))) может сейчас в 250 символов уложимся

4zz 03-02-2013 13:15 2081525

Да все работает, правда сначала выдает -что слишком длинно, но затем срабатывает.
Спасибо!

Цитата:

Цитата zion87
если архив sfx то можно задать ему и папку расположения и что он должен сделать до и после распаковки »

До получается, а вот после..-как написать, чтобы удалил себя? или заменил себя?

f3ra 24-10-2016 07:59 2681103

Добрый день. Подскажите пожалуйста, как модифицировать скрипт что бы он выполнял поиск файла в определенной папке и ее подкаталогах, найдя совершал проверку на наличие строки в файле "permission java.awt.AWTPermission "accessClipboard";" и если не находил ее то заменял этот файл на заранее подготовленный.
Конкретно интересует поиск файла java.policy который находится в C:\Program Files (x86)\Java\ и после прохождения проверки заменить его на заранее подготовленный файл. Спасибо!
Кривыми руками был написан такой код. Правда без проверки.
Код:

@Echo Off
Set FDir="C:\Program Files (x86)\Java"
Set Maska=java.policy
set direct="%~dp0"
FOR /R %FDir% %%i IN (%Maska%) DO Call :Obrabotka "%%i"
GoTo :BBB1
:Obrabotka
if not exist %1 goto BBB1
Echo %1
copy /y %direct%java.policy %1
:BBB1


alpap 25-10-2016 02:55 2681384

Цитата:

Цитата f3ra
и если не находил ее то заменял этот файл на заранее подготовленный »

А зачем так усложнять?
Хватит этого:
Код:

@echo off
set "d=C:\papka"
set "f=file.txt"
set "pf=%Userprofile%\Desktop\file.txt"
if not exist "%d%\%f%" copy /y "%pf%" "%d%\"
pause


f3ra 27-10-2016 08:51 2682011

Цитата:

Цитата alpap
А зачем так усложнять? »

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

alpap 27-10-2016 13:14 2682099

f3ra,
Можете из этого сделать то что нужно:
Код:

@echo off
set "d_in=papka_in"
set "d_out=papka_out"
set "f=file.txt"
set "s=stroka"
for /f "delims=" %%a in ('dir/a-d/b/s "%d_in%"^|find/i "%f%"') do <"%%a">nul (find/i "%s%" && if not exist "%d_out%" md "%d_out%"& copy "%%a" "%d_out%\")
pause>nul


alpap 27-10-2016 13:35 2682106

Еще можно так:
Код:

@echo off
set "d_in=papka_in"
set "d_out=papka_out"
set "pf=%Userprofile%\Desktop\file.txt"
set "s=stroka"
for /f "delims=:" %%a in ('findstr /s /c:"%s%" "%d_in%\*"') do if not exist "%%a" copy "%pf%" "%d_out%\"
pause>nul



Время: 22:14.

Время: 22:14.
© OSzone.net 2001-