Компьютерный форум 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=332968)

BKPB 03-02-2018 18:22 2795543

Скрипт для удаления файлов и папок
 
Собрал из кусков скрипт для удаления файлов и папок.
Но проблема такая, если все указанные в скрипте файлы присутствуют в системе то он отрабатывает нормально.
А если какого нибудь файла или папки нет, то скрипт выдаёт ошибку: файл не найден и окно висит пока не закроешь вручную.
Помогите подправить или написать новый, чтобы не было такой ошибки.
Вот мой скрипт:
Скрытый текст
' Задержка 1 секунда
WScript.Sleep 1*1000
' Удаление файла
WScript.CreateObject("Scripting.FileSystemObject").DeleteFile "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe", True
WScript.CreateObject("Scripting.FileSystemObject").DeleteFile "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe", True
' Задержка 1 секунда
WScript.Sleep 1*1000
' Удаление папки
WScript.CreateObject("Scripting.FileSystemObject").DeleteFolder "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer", True

А если поможете написать скрипт или .cmd, чтобы сперва отработал инсталлятор браузера setup.exe, затем ещё один .exe (он просто заменяет файлы в папке с настройками) и затем удалились бы нужные папки и файлы,
то я бы был безмерно вам благодарен.

Казбек 03-02-2018 19:16 2795554

BKPB,

Код:

start "" /wait "C:\Program Files\setup.exe"
start "" /wait "C:\Program Files\еще один.exe" 
del /f /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe" "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe"
rd /s /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer"


megaloman 03-02-2018 19:22 2795556

Цитата:

Цитата BKPB
А если какого нибудь файла или папки нет, то скрипт выдаёт ошибку »

Если в Вашем скрипте первой строкой поставить
Код:

On Error Resume Next
то скрипт не выдаст ошибку.

BKPB 03-02-2018 20:22 2795568

Казбек,
Забыл указать, что .exe , будут запускаться из папки Temp.
Сделал так, но не сработало.
Скрытый текст
start "" /wait "\%Temp%\Setup.exe"
start "" /wait "\%Temp%\Settings.exe"

Выдаёт ошибку:
Не удается найти "\C:\Users\A47D~l\AppData\Local\Temp\Setup.exe". Проверьте, правильно ли указано имя и повторите попытку.
Поправьте пожалуйста, как правильно сделать.

Казбек 03-02-2018 20:25 2795569

BKPB,

Слэш перед Temp лишний.
Код:

start "" /wait "%Temp%\Setup.exe"

BKPB 03-02-2018 20:31 2795572

Казбек,
Тоже не сработало: Не удается найти "Temp\Setup.exe". Проверьте, правильно ли указано имя и повторите попытку.

Казбек 03-02-2018 20:40 2795573

Цитата:

Цитата BKPB
Тоже не сработало: Не удается найти "Temp\Setup.exe". Проверьте, правильно ли указано имя и повторите попытку. »

Покажите скрин вместе с командой.

Или укажите сразу полный путь:
Код:

start "" /wait "C:\Users\A47D~l\AppData\Local\Temp\Setup.exe"

megaloman 03-02-2018 20:47 2795574

BKPB, что такое Temp? Если это переменная окружения, то я бы предложил
Код:

Pushd "%Temp%"
start " " /wait Setup.exe
Popd

В противном случае указать для Pushd полный правильный путь
Pushd "C:\Users\.........\Temp"
По видимому, Pushd надо сделать обязательно, возможно exe ищет рядом в папке нужные фаилы и папки.

BKPB 03-02-2018 20:52 2795576

Казбек,
http://imageban.ru/show/2018/02/03/d...777c856090/png

megaloman 03-02-2018 21:03 2795578

BKPB, у вас на скриншоте текущая папка "C:\Users\.........\Temp" и вы зачем-то делаете Temp\setup.exe. Имхо, Temp\ здесь ошибочен и не нужен.

BKPB 03-02-2018 21:17 2795580

Казбек,
Если запускать из папки TEMP (переменная окружения), то срабатывает.
Но дело в том, что при распаковке моего инсталлятора SFX, запуск происходит не из самой папки TEMP,
а из C:\Users\Администратор ПК\AppData\Local\Temp\RarSFX0 и эта папка RarSFX0 всегда имеет разное имя,
то RarSFX0, то RarSFX1. И поэтому сценарий не срабатывает: Невозможно найти файлы Setup.exe и Settings.exe.
Скрытый текст
Pushd "%Temp%"
start " " /wait Setup.exe
Popd
ping -n 3 localhost>Nul
Pushd "%Temp%"
start " " /wait Settings.exe
Popd
del /f /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe" "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe"
rd /s /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer"

mwz 03-02-2018 21:27 2795583

Цитата:

Цитата BKPB
start " " /wait Setup.exe »

Код:

start " " /wait "%~dp0Setup.exe"
(и далее аналогично) тоже не срабатывает?

Казбек 03-02-2018 21:41 2795586

BKPB,

Расскажите нам на словах, что вы хотите сделать. Без кода. И конечную цель этих действий.

Цитата:

Цитата BKPB
запуск происходит не из самой папки TEMP,
а из C:\Users\Администратор ПК\AppData\Local\Temp\RarSFX0 и эта папка RarSFX0 всегда имеет разное имя,
то RarSFX0, то RarSFX1. И поэтому сценарий не срабатывает: Невозможно найти файлы Setup.exe и Settings.exe. »

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

На том скрине, что вы предоставили выше, вы выполнили:
Код:

start "" /wait "Temp\Setup.exe"
Вместо моего варианта:
Код:

start "" /wait "%Temp%\Setup.exe"

BKPB 03-02-2018 21:49 2795588

mwz,
Спасибо, так срабатывает, но теперь не удаляются папки:
Скрытый текст
Pushd "%Temp%"
start " " /wait "%~dp0Setup.exe"
Popd
Pushd "%Temp%"
start " " /wait "%~dp0Settings.exe"
Popd
del /f /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe" "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe"
rd /s /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer"

megaloman 03-02-2018 21:53 2795589

Код:

@Echo Off

Set "BoxIn=Z:\Users\Администратор ПК\AppData\Local\Temp\RarSFX*"

FOR /D %%d IN ("%BoxIn%") DO If Exist "%%d\Setup.exe" (Pushd "%%d" &Start " " /wait "Setup.exe")
FOR /D %%d IN ("%BoxIn%") DO If Exist "%%d\Settings.exe" (Pushd "%%d" &Start " " /wait "Settings.exe")
Popd


BKPB 03-02-2018 22:01 2795590

=кк

megaloman 03-02-2018 22:04 2795592

Цитата:

Цитата BKPB
У меня получилось 3 файла: browser.7z, Setup.exe, Settings.exe. »

Где они получились? Где они находятся? Укажите полный путь. Setup.exe, Settings.exe - это исполнимые файлы или самораспаковывающиеся архивы? Куда?
Цитата:

Цитата BKPB
Pushd "%Temp%"
start " " /wait "%~dp0Setup.exe"
Popd
Pushd "%Temp%"
start " " /wait "%~dp0Settings.exe"
Popd »

ИМХО, это неправильно. Если Setup.exe и Settings.exe находятся рядом с Вашим батником, то
Код:

Pushd "%~dp0"
start " " /wait "Setup.exe"
start " " /wait "Settings.exe"
Popd

BKPB, Разберитесь с путями. Батник запускается из любого места? Какой полный путь к Setup.exe, Settings.exe?
Цитата:

Цитата BKPB
не стали удалятся файлы и папка »

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

BKPB 03-02-2018 22:38 2795598

Я хочу создать инсталлятор Яндекс браузера без голосового помощника Алиса и с моими готовыми настройками, а также удалить не нужную после установки папку Installer и файлы yupdate-exec.exe и service_update.exe отвечающие за автоматическое обновление браузера.
У меня есть 3 файла: browser.7z, Setup.exe, Settings.exe. Которые я запаковываю в SFX WinRar.
Setup.exe - исполняемый файл (оригинальный - установка браузера)
Settings.exe - самораспаковывающиеся архив в котором находится папка Default c готовыми настройками браузера
(после установки браузера она заменяет папку по умолчанию Default (C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\User Data\Default).
Мне нужно, чтобы файлы распаковались в папку %TEMP% и запустилась установка, а по окончании установки браузера, пака с настройками заменила такую же папку по умолчанию
и удалились ненужные файлы service_update.exe service_update.exe и ненужная после установки папка Installer.
Вот мой файл .cmd:
Скрытый текст
Pushd "%Temp%"
start " " /wait "%~dp0Setup.exe"
start " " /wait "%~dp0Settings.exe"
Popd
ping -n 6 localhost>Nul
del "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe"
del "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe"
rd /s /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer"

Установка проходит нормально, но файлы service_update.exe service_update.exe и ненужная после установки папка Installer не удаляются.
Часть причины, я так думаю из за того что происходит запуск браузера после отработки инсталлятора, хотя даже после того как я его закрою и запущу
Скрытый текст
del "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe"
del "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe"
rd /s /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer"

Файлы и папка всё равно остаются на месте.

BKPB 03-02-2018 23:04 2795602

megaloman,
Вот батник который работает из папки (RarSFX0 или RarSFX1 - всегда разные) создаваемой SFX WinRar инсталлятором в папке ТЕМР
С:\Users\Администратор ПК\AppData\Local\Temp\RarSFX*
за исключением, что не удаляются файлы и папка
Скрытый текст
Pushd "%Temp%"
start " " /wait "%~dp0Setup.exe"
start " " /wait "%~dp0Settings.exe"
Popd
ping -n 6 localhost>Nul
del "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe"
del "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe"
rd /s /q "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer"

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

megaloman,
Если вы считаете, что так лучше сделаю так,
Скрытый текст
Pushd "%~dp0"
start " " /wait "Setup.exe"
start " " /wait "Settings.exe"
Popd

Просто я в этом ничего не понимаю поэтому и поросил помочь.

Если делать удаление через скрипт, во так:
Скрытый текст
' Задержка 1 секунда
WScript.Sleep 1*1000
' Удаление файла
WScript.CreateObject("Scripting.FileSystemObject").DeleteFile "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe", True
WScript.CreateObject("Scripting.FileSystemObject").DeleteFile "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe", True
' Задержка 1 секунда
WScript.Sleep 1*1000
' Удаление папки
WScript.CreateObject("Scripting.FileSystemObject").DeleteFolder "C:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer", True

тогда все удаления отрабатывают отлично.

megaloman 03-02-2018 23:38 2795610

Вложений: 1
Цитата:

Цитата megaloman
А батник сохраняли в 866 кодировке? То, что Вы показываете, содержит русские буквы. Поэтому это очень важно. »

VBS надо сохранять в 1251 кодировке. Если он работает, то так оно и есть. CMD должен работать с 866 кодировкой. Я приложил вариант батника в нужной кодировке. Переименуйте его.
В файле забыл убрать
Код:

FOR /D %%d IN ("%BoxIn%") DO If Exist "%%d\Setup.exe" (Pushd "%%d" &Echo Start " " /wait "Setup.exe")
FOR /D %%d IN ("%BoxIn%") DO If Exist "%%d\Settings.exe" (Pushd "%%d" &Echo Start " " /wait "Settings.exe")

Подкорректируйте, пожалуйста.
Или, как вариант, если, например, Вы батник сохраняете блокнотом (1251 кодировка)
Код:

@Echo Off
chcp 1251 >nul

Set "BoxIn=Z:\Users\Администратор ПК\AppData\Local\Temp\RarSFX*"
FOR /D %%d IN ("%BoxIn%") DO If Exist "%%d\Setup.exe" (Pushd "%%d" &Start " " /wait "Setup.exe")
FOR /D %%d IN ("%BoxIn%") DO If Exist "%%d\Settings.exe" (Pushd "%%d" &Start " " /wait "Settings.exe")

Del /F /Q "Z:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe"
Del /F /Q "Z:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe"

Rd /S /Q "Z:\Users\Администратор ПК\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer"


Казбек 04-02-2018 01:09 2795619

Цитата:

Цитата BKPB
Вы говорите, что они не удаляются из за руских букв в пути, но до этого они именно по этим путям и удалялись. »

Есть подозрения, что один из exe файлов остается запущенным, а поскольку используется ключ wait, то до удаления у вас дело попросту не доходит. Сразу после выполнения скрипта с отсутствием удаления, выполните в командной строке:
Код:

TASKLIST /FI "IMAGENAME eq set*"
Покажите скрин.

Цитата:

Цитата BKPB
что не удаляются файлы и папка »

Расплывчатая формулировка. В конце выполняемого вами скрипта добавьте строку pause и заскриньте его выполнение.

megaloman 04-02-2018 08:48 2795638

Если
Цитата:

Цитата Казбек
один из exe файлов остается запущенным, а поскольку используется ключ wait »

то, или не закроется командное окно при выполнении батника, либо система не выйдет на приглашение > в командном окне.

Казбек 04-02-2018 09:26 2795641

megaloman,

Абсолютно верно. Но поскольку информацию от автора мы привыкли получать порционно, то даже такое поведение вполне может укладываться в формулировку:
Цитата:

Цитата BKPB
что не удаляются файлы и папка »


BKPB 04-02-2018 09:45 2795646

Казбек,

Казбек 04-02-2018 10:12 2795649

BKPB,

Выполняйте инструкцию из сообщения 20 или 17 от megaloman (там посыл, в принципе, дублируется). После этого скрипт должен сработать.

Цитата:

Цитата BKPB
Может легче написать скрипт, раз у меня есть скрипт который отлично всё удаляет»

Код:

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "С:\Users\Администратор ПК\AppData\Local\Temp\RarSFX0\setup.exe", 1, true

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "С:\Users\Администратор ПК\AppData\Local\Temp\RarSFX0\settings.exe", 1, true


BKPB 04-02-2018 10:30 2795662

Казбек,
Да, да я как раз сейчас это проверял всё отработало хорошо,
за исключением распаковки Settings.exe, т.к служба браузера работала.
Архив не смог заменить файлы в папке с программой.
Нет ли какой нибудь команды после выполнения Setup.exe (установки браузера)
завершить процесс браузера, а потом распаковать настройки.

megaloman,
Спасибо огромное, поменял русские символы на кодировку 866 из вашего я18020321.bat.txt
И всё отлично отработало.

Казбек 04-02-2018 10:32 2795664

Цитата:

Цитата BKPB
завершить процесс браузера »

Код:

TASKKILL /F /IM browser.exe
browser.exe замените на имя процесса вашего браузера.

BKPB 04-02-2018 12:28 2795709

Огромное спасибо всем кто помогал: Казбек, mwz, megaloman.
За ваше потраченное время и терпение.
Задача решена.

BKPB 04-02-2018 18:07 2795795

Задам ещё один вопрос.
Добавил в начало батника @echo off, чтобы скрыть процесс установки и всё бы хорошо пока
не доходит до
TASKKILL /F /IM browser.exe
TASKKILL /F /IM service_update.exe
тогда в окне появляются строки, что процессы такие то остановлены
и что процесс service_update.exe не запущен

Можно ли скрыть и эти сообщения или нет ?
Вот батник:
Скрытый текст
@echo off
@echo.
@echo --- “бв***ў«Ёў*Ґвбпя џ*¤ҐЄб Ѓа*г§Ґа ---
@echo.
Pushd "%Temp%"
start " " /wait "%~dp0Setup.exe"
ping -n 7 localhost>Nul
TASKKILL /F /IM browser.exe
TASKKILL /F /IM service_update.exe
ping -n 2 localhost>Nul
start " " /wait "%~dp0Settings.exe"
Popd
ping -n 1 localhost>Nul
del "C:\Users\Ђ¤¬Ё*Ёбва*в®а ЏЉ\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\yupdate-exec.exe"
del "C:\Users\Ђ¤¬Ё*Ёбва*в®а ЏЉ\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\service_update.exe"
del "C:\Users\Ђ¤¬Ё*Ёбва*в®а ЏЉ\AppData\Local\Yandex\YandexBrowser\Application\17.11.1.990\Installer\browser.7z"

Казбек 04-02-2018 18:46 2795803

BKPB,

Код:

TASKKILL /F /IM browser.exe>nul 2>&1

BKPB 04-02-2018 18:57 2795804

Казбек,
тогда в окне появляются строки, что процессы такие то остановлены
Это перестало появлятся, а
процесс service_update.exe не запущен
так и появляется

Казбек 04-02-2018 20:04 2795812

Цитата:

Цитата BKPB
процесс service_update.exe не запущен »

А вы заменили во второй строке исполняемые файлы?? Должно получиться так:
Код:

TASKKILL /F /IM browser.exe>nul 2>&1
TASKKILL /F /IM service_update.exe>nul 2>&1

Если вы все сделали, как я написал, но результата все равно нет - тогда по старинке: предоставьте скрин с выполнением скрипта.


У меня все отрабатывает:
Скрытый текст

BKPB 04-02-2018 20:14 2795814

Цитата:

Цитата Казбек
А вы заменили во второй строке исполняемые файлы? »

Нет вы не написали и я тоже не подправил.
СПАСИБО ёщё раз.
Теперь всё просто отлично.


Время: 10:15.

Время: 10:15.
© OSzone.net 2001-