Скрипт для удаления файла в windows

Иногда надо сделать удаление файлов старше n дней. Например Backup’ ы. Можно делать это вручную, отсортировать их по дате и удалить, а можно воспользоваться скриптом. В данном примере мы рассмотрим скрипт для удаления файлов старше n дней и добав
  • На главную
  • Категории
  • Операционные системы
  • Удаление файлов старше n дней

Иногда надо сделать удаление файлов старше n дней. Например Backup’ ы. Можно делать это вручную, отсортировать их по дате и удалить, а можно воспользоваться скриптом. В данном примере мы рассмотрим скрипт для удаления файлов старше n дней и добавим задание в планировщик Windows Server 2012R2.

2017-03-07 11:37:34183

Удаление файлов старше n дней

Содержание:

1. Скрипт удаления файлов старше n-дней

2. Создание задания в планировщике задач

#Скрипт удаления файлов старше n-дней

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

FORFILES /p F:backup /s /m *.* /d -30 /c "CMD /c del /Q @FILE"

Где:

F:backup — путь, в какой папке мы будем с вами искать файлы для удаления
*.* — имя (маска) файлов
/d -30 — старше скольки дней нам необходимо удалить файлы.

Вот так это выглядит в PowerShell:


удалениеОсталось только его выполнить и все.

#Создание задания в планировщике задач

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

Итак, что нам для этого надо?

Для начала идем в «Пуск -> панель управления -> Администрирование» и запускаем там «Планировщик заданий«.

Выбираем пункт «Создать задачу«:

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

Далее переходим на вкладку «Триггеры» и создаем расписание, когда мы будем запускать наше задания. У меня настроено в 10:00 каждые 2 дня.

Далее идем на вкладку «Действия» и задаем действие, которое будет выполняться. Выбираем «Запуск программы»

программу или сценарий

и указываем путь до PowerShell:

C:WindowsSysWOW64WindowsPowerShellv1.0powershell.exe

А аргументе указываем путь до нашего скрипта, который мы создали ранее:

-File "c:scriptochistkaf.ps1"

Нажимаем «Ок» и еще раз «Ок»

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

Максим Орлов

Ваш покорный слуга — компьютерщик широкого профиля: системный администратор, вебмастер, интернет-маркетолог и много чего кто. Вместе с Вами, если Вы конечно не против, разовьем из обычного блога крутой технический комплекс.

Для удаления файлов старше n дней, можно пользоваться скриптами CMD, VBS и PowerShell.

Рассмотрим варианты:

1. Я использовал утилиту командной строки forfiles.exe, входящую в состав Windows 7- Windows 2008 Server (когда-то она входила в Windows 2000 Resource Kit).
Одной командой удаляются все файлы из указанной папки и вложенных в нее.
Команда для выполнения: forfiles.exe /p %temp% /s /m *.* /d -14 /c «cmd /c del /q /f @file»
• Вместо %temp% (временной папки в профиле) подставляешь свою папку (параметр /p)
• Возраст файлов по умолчанию 14 дней (параметр /d), но можно задать любое значение
• Можно удалять файлы определенного расширения по маске (например, /m *.log)
• За рекурсивное удаление (во вложенных папках) отвечает параметр /s
Конечно, в скрипте вы можете использовать несколько команд, каждая из которых будет удалять заданную папку. Справка по использованию утилиты вызывается командой forfiles /?.
2. Для выполнения очистки папки по расписанию нужно создать скрипт с именем cleanup.cmd, содержащий любую из приведенных выше команд, и скопировать его в папку %windir%system32.
Задание в планировщике создается одной командой: Schtasks.exe /Create /RL Highest /TN CleanUP /SC Weekly /D SUN /ST 14:00 /TR «%WINDIR%system32cleanup.cmd»
Задание с именем CleanUp будет выполняться:
• с наивысшими правами (параметр /RL)
• раз в неделю (параметр /SC)
• по воскресеньям (параметр /D)
• в 14:00 (параметр /ST)
Открой Пуск – Поиск – Планировщик заданий и увидишь в библиотеке планировщика задание CleanUp.

PowerShell

#Удаляет файлы согласно фильтру и даты создания
get-childitem "d:t1" -filter *.mxl -recurse | Where{$_.LastWriteTime -le (Get-Date).AddDays(-1)} | Remove-Item -Recurse -Force

Cirick86

$TargetDelNt = "D:1" #путь до папки шары
$Del = "-3" #Количество хранимых дней
 
$CurrentDay = Get-Date
 
$ChDaysDel = $CurrentDay.AddDays($Del)
 
#Удаление файлов, дата создания которых больше 3 дней
GCI -Path $Taер rgetDelNt -Recurse | Where-Object {$_.CreationTime -LT $ChDaysDel} | RI -Recurse -Force 
 
#Удаление пустых папок
GCI -Path $TargetDelNt -Recurse | Where-Object {
$_.PSIsContainer -and 
@(Get-ChildItem -Path $_.Fullname -Recurse | Where { -not $_.PSIsContainer }).Count -eq 0 } | RI -Recurse

Автоматическое удаления файлов в папке по заданным критериям

PowerShell logo

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета для системных администраторов. В прошлый раз мы с вами разобрали базовую установку CentOS 8. Идем далее и в сегодняшней статье я с вами хочу поделиться полезным скриптом, который позволяет в автоматическом режиме производить удаление файлов по заданным заранее критериям. Уверен, что подобная задача очень часто стоит перед многими системными администраторами в чьи задачи входит обслуживание серверов Windows.

Требования к автоматическому удалению файлов

Есть ряд серверов CRM, Web сервера IIS и другие у которых есть проблема с огромным количеством логов. Чтобы не было переполнения диска нужно их автоматически удалять, для этого наш скрипт должен отвечать вот таким требованиям:

  • Должен быть CSV файл в котором прописано имя сервера. папку которую нужно чистить, количество дней старше которых нужно производить удаление
  • Далее данный CSV файл должен импортироваться
  • Должны вестись логи по процессу удаления
  • Скрипт должен быть написан на PowerShell

Код скрипта по автоматическому удалению файлов на серверах Windows

Вот пример моего CSV файла. Тут есть столбцы:

  • Server; — DNS имя сервера
  • Folder; — Путь
  • RetentionDays — Возраст файлов. старше N-дней

Список сетевых шар для очистки в csv

Обязательно у CSV файла должно быть такое же имя, как у данного PowerShell скрипта

# Задаем читаемые даты и время
function Date {Get-Date -Format «yyyy.MM.dd HH:mm:ss»}

# Задается папка с логами, если ее нет, то будет создана, так же сюда будут складываться логи
$log_folder = «$PSScriptRootLogs» + $($MyInvocation.MyCommand.Name -replace («.ps1», «»))
$log = «$log_folder$(Get-Date -Format «yyyy_MM_dd_HH_mm_ss»).txt»

$input_csv_file = «$PSScriptRoot» + $($MyInvocation.MyCommand.Name -replace («.ps1», «.csv»))

if (! (Test-Path $log_folder -PathType Container -ErrorAction SilentlyContinue))
{
New-Item $log_folder -ItemType D -Force | Out-Null
}

# Импорт CSV

«$(Date) Start Processing» | Tee-Object $log -Append

foreach ($line in (Import-Csv $input_csv_file -Delimiter «;»)) # | select -First 1
{
$folder = $line.Folder
$server = $line.server
$AddDays = $line.RetentionDays

«$(Date) Processing folder `»$folder`» on server `»$server`»» | Tee-Object $log -Append

$path = «\$server$folder» -replace «:», «$»

«$(Date) Trying to remove old files from folder `»$path`» on server `»$server`»» | Tee-Object $log -Append
$files = $null

try {
$files = Get-ChildItem $path -File -ErrorAction Stop | ? {$_.LastWriteTime -le (Get-Date).AddDays(-$AddDays)} # | select -First 1
}
catch {
«$(Date) $($_.exception.message)» | Tee-Object $log -Append
}

foreach ($file in $files)
{
«$(Date) Trying to remove file `»$($file.FullName)`»» | Tee-Object $log -Append

try {
$file | Remove-Item -Force
}
catch {
«$(Date) $($_.exception.message)» | Tee-Object $log -Append
}
}

$files = $null
$folders2 = Get-ChildItem $path -Directory # | ? {$_.LastWriteTime -le (Get-Date).AddDays(-30)} # | select -First 1 # -Recurse

foreach ($folder2 in $folders2)
{
«$(Date) Processing folder `»$($folder2.FullName)`» on server `»$server`»» | Tee-Object $log -Append

try {
$files = Get-ChildItem $($folder2.FullName) -Recurse -File -ErrorAction Stop | ? {$_.LastWriteTime -le (Get-Date).AddDays(-$AddDays)} # | select -First 1
}
catch {
«$(Date) $($_.exception.message)» | Tee-Object $log -Append
}

«$(Date) Trying to remove $($files.Length) files» | Tee-Object $log -Append

foreach ($file in $files)
{
«$(Date) Trying to remove file `»$($file.FullName)`»» | Tee-Object $log -Append

try {
$file | Remove-Item -Force
}
catch {
«$(Date) $($_.exception.message)» | Tee-Object $log -Append
}
}
}
}

«$(Date) End Processing» | Tee-Object $log -Append

Май 6, 2022 18:23

Делаю бекапы каждый день, накапливается не один десяток гигабайт информации. Чистить нужно, тем более старые бекапчики особой важности не несут. Раньше удалял вручную, но потом задумался… Вручную делать это лень, тем более можешь завтыкать, протупить и удалить не то. Короче, ленивый сделает лучше всех — нужно автоматизировать.

Воспользовался встроенной утилитой forfiles. Теперь все делает планировщик задач и несложный bat-ник в две строки. Пример дальше.

Команды forfiles. Примеры

Вот так примерно выглядит команда для отображения всех файлов с расширением .rar на диске С старше 10-ти дней:
forfiles /p C: /m *.rar /s /d -10 /c «cmd /c echo @path»

Разберем ключи по порядку:

/p — пусть для проверки. В примере диск C:
/m — маска для поиска. Можно не задавать, если хотим убрать все файлы в папке. В примере все архивы с расширением .rar
/s — сканируем вложенные папки в том числе.
/d — дата. Можно задать в формате dd.mm.yyyy или dd. У нас -10 дней, можно указать +N дней. Про +N дней читайте далее.
/c — команда. Ключевое что нам нужно — собственно что мы будем делать с файлами. В командах также можно использовать переменные:
@path — показывает полный путь к файлу и его имя.
@relpath — показывает путь к файлу только в сканируемой папке.
@file — имя файла полностью с расширением.
@fname — только имя файла, без расширения.
@ext — только расширение имени файла.
@isdir — проверка типа файла — папка или файл. Возвращает true, если папка, и false для файлов.
@fsize — возвращает размер файла в байтах.
@fdate — возвращает дату последнего изменения файла.
@ftime — возвращает время последнего изменения файла.

Также результаты исполнения скрипта можно записать в файл.

Пример использования forfiles — отобразить все файлы .zip на диске и записать их в файл

Следующий код отобразит все Ваши исполняемые файлы .exe:
forfiles /p C: /m *.exe /s /c «cmd /c echo @path»

Если нужно их записать в файл, то добавьте в конце знак БОЛЬШЕ и адрес куда сохранить файл (лучше всего прописать полный путь).
forfiles /p C: /m *.exe /s /c «cmd /c echo @path» > D:all_exefiles.txt

Вставляем код в cmd:

Forfiles. Запись в файл выполненного скрипта

Forfiles. Запись в файл выполненного скрипта

Результат — созданный файл на диске D: и его содержимое (можно много интересного найти):

Forfiles. Запись в файл выполненного скрипта. Результат

Forfiles. Запись в файл выполненного скрипта. Результат

Пример forfiles с переменными путь, дата, размер

Давайте вызовем все наши файлы с диска D: с расширением .zip, а выведем их на экран с адресом, датой и размером файла. Используем скрипт:

forfiles /p D: /m *.zip /s /c «cmd /c echo @path изменен @fdate и размером @fsize байт »

Вот результат выполнения скрипта:

Команды forfiles. Используем переменные со своим текстом

Команды forfiles. Используем переменные со своим текстом

Как удалить файлы старше 10 дней

Чаще всего forfiles используют как раз для задачи удаления устаревших файлов. Вот Вам cmd скрипт для удаления старых файлов (в примере старше 10 дней):
forfiles /p C: /m *.rar /s /d -10 /c «cmd /c del @path /q»

Как удалить папки старше 7 дней с помощью forfiles

Кроме самих файлов не лишним будет удалять и папки, тем более если они будут пустые (без файлов). Код:
forfiles /p C:downloads /s /d -7 /c «cmd /c rmdir /s del @path /q»
В этом примере я написал уже 7 дней. Для удаления папок мы используем rmdir, ключ /s — для сканирования вложенных папок, del — команда удаления, /q — удаление без подтверждения.

Если вы не можете удалить какие-то файлы или папки со своего компьютера под управлением ОС Windows, то мы рекомендуем вам воспользоваться такое полезной штуковиной, как PowerShell. При помощи данного средства вы без каких-либо проблем можете удалить из системы файлы и папки, которые сложно или и вовсе нельзя удалить традиционными методами.

Содержание

  • PowerShell для удаления файлов и папок
  • Удаление одного файла через PowerShell
  • Удаление одной папки через PowerShell
  • Удаление нескольких файлов через PowerShell
  • Удаление нескольких папок через PowerShell
  • Проверка наличия файлов в папке через PowerShell
  • Проверка последнего изменения и времени создания через PowerShell
  • Принудительное удаление объекта через PowerShell
  • Удаление файлов/папок без подтверждения через PowerShell
  • Исключение из команды на удаление в PowerShell определенных файлов

PowerShell для удаления файлов и папок

Чтобы удалить из системы файлы и папки с помощью Windows PowerShell, вам нужно придерживаться следующих шагов:

  1. откройте Windows PowerShell;
  2. найдите нужный файл или папку;
  3. выполните команду по удалению объекта.

Верно, все настолько просто. Однако давайте все-таки пройдемся по процессу удаления через PowerShell немного поподробней.

Удаление одного файла через PowerShell

Прежде все, вам необходимо открыть перед собой окошко PowerShell. Для этого нажмите на клавиатуре комбинацию Windows+S, а затем пропишите запрос PowerShell. Нажмите правой кнопкой на найденный результат и выберите «Запуск от имени администратора».

Чтобы удалить какой-то определенный файл, вам нужно выполнить следующую команду:

Remove-item [путь к файлу]

В общем, довольно простая команда. Давайте предположим, что у вас на Рабочем столе есть папка под названием «Testfiles», а внутри нее лежит файл Testfiles.jpg, который вам нужно удалить. В таком случае вышеуказанная команда будет выглядеть следующим образом:

Remove-item C:Users[имя пользователя]DesktopTestfilesTestfiles.jpg

Обязательно не забываем прописывать расширение файла под удаление, иначе PowerShell просто не разберет команду — файл останется на компьютере и вы увидите ошибку в окошке средства.

Удаление одной папки через PowerShell

Хотите удалить какую-то конкретную папку в своей ОС Windows? Тогда вам нужно использовать точно такую же команду, что и ранее.

Remove-item [путь к папке]

Давайте предположим, что у вас на Рабочем столе есть папка под названием «Testfiles» — вы хотите от нее избавиться. В таком случае команда примет следующий вид:

Remove-item C:Users[имя пользователя]DesktopTestfiles

Если папка пустая, то она будет удалена сразу же. Тем не менее при наличии хоть каких-то файлов в ней вам придется нажать на кнопки Y и Enter, чтобы подтвердить их удаление. В окошке PowerShell будут подсказки начнет того, за что отвечают какие кнопки.

Удаление нескольких файлов через PowerShell

Если вы хотите избавиться сразу от нескольких файлов через PowerShell, то вам потребуется использовать уже несколько иную команду. Выглядеть она будет следующим образом:

Remove-item [путь к файлу], [путь к файлу1], [путь к файлу2]

Верно, вам придется вводить местоположение для каждого файла, который вы хотите удалить из своей системы. Предположим, что у вас на Рабочем столе есть файл AnotherTest.txt, а в папке Downloads — AnotherTest1.jpg. Что делать, если их оба нужно удалить? В таком случае команда для PowerShell будет выглядеть следующим образом:

Remove-item C:Users[имя пользователя]DesktopAnotherTest.txt, C:Users[имя пользователя]DownloadsAnotherTest1.jpg

Удаление нескольких папок через PowerShell

Команда для удаления нескольких папок мало чем отличается от команды, предназначенной для удаления нескольких файлов. Используя прошлые примеры, команда в PowerShell для нескольких папок будет выглядеть следующим образом:

Remove-item C:Users[имя пользователя]DesktopAnotherTest, C:Users[имя пользователя]DownloadsAnotherTest1

Опять-таки, если в этих папках будут располагаться какие-то файлы, то вам потребуется подтвердить их удаление в окне PowerShell, нажав Y и Enter. Кроме того, стоит отметить, что файлы и папки, удаленные подобным образом, не попадают в Корзину на Рабочем столе, а сразу же удаляются из системы.

Проверка наличия файлов в папке через PowerShell

Если вы не можете открыть папку, но хотите знать, что в ней находится, то можете воспользоваться следующей командой:

Get-ChildItem [путь к папке]

Например, если вы хотите заглянуть внутрь папки «AnotherTest2», располагающейся на Рабочем столе, то команда будет выглядеть вот так:

Get-ChildItem C:Users[имя пользователя]DesktopAnotherTest2

Задействовав данную команду, вы увидите несколько колонок, в которых будет содержаться полезная информация касательно файлов внутри нужной вам папки. Последняя колонка (по умолчанию) будет отвечать за название файлов. Так вы будете знать, стоит ли удалять эту папку или нет.

Проверка последнего изменения и времени создания через PowerShell

Если вы хотите понять, когда был создан и изменен какой-то объект (папка или файл) в вашей системе, то вам нужно выполнить в PowerShell следующую команду:

Get-ChildItem C:Users[имя пользователя]DesktopAnotherTest2 | Select-Object FullName, LastWriteTime, CreationTime

Принудительное удаление объекта через PowerShell

У вас не получится использовать вышеуказанные команды для удаления скрытых файлов и файлов с атрибутом только для чтения. Если вы попытаетесь это сделать, то в окошке PowerShell вас встретит ошибка. Тем не менее вы можете принудительно избавиться от тех или иных файлов/папок, задействовав параметр -force. Предположим, что у вас на Рабочем столе есть папка AnotherTest3 со скрытыми файлами внутри и вы хотите избавиться от нее. Для удаления этой папки вам нужно выполнить в PowerShell следующую команду:

Remove-item C:Users[имя пользователя]DesktopAnotherTest3 -force

Как и всегда, при желании удалить два или больше объектов вам понадобится нажать Y и Enter в окошке PowerShell, чтобы подтвердить свои намерения.

Удаление файлов/папок без подтверждения через PowerShell

Кстати, говоря о подтверждения об удалении, не хотите постоянно заниматься ими? Тогда вы можете пропустить эти запросы, применив к команде на удаления особый параметр. Такая команда будет выглядеть следующим образом:

Remove-item C:Users[имя пользователя]DesktopAnotherTest3 -recurse

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

Исключение из команды на удаление в PowerShell определенных файлов

Давайте представим, что у вас есть несколько файлов с различными расширениями, например, TXT, PNG, DOCX, PDF и так далее. Вы хотите удалить всё, за исключением файлов с расширением TXT. В таком случае вам нужно задействовать вместе с соответствующей командой параметр -exclude. Вот что у вас должно получиться:

Remove-Item –path C:Users[имя пользователя]DesktopAnotherTest3* -exclude *.txt

Как вы уже могли догадаться, из папки AnotherTest3 будут удалены абсолютно все объекты, за исключением текстовых файлов. Очень удобная команда для очистки какой-то папки, в которой намешано очень много разных файлов, и вам нужно отфильтровать ее, избавившись от всего ненужного.


Windows, Windows 10, Windows 7, Windows 8, Windows Server, Windows Vista, Windows XP

  • 14.11.2020
  • 9 415
  • 3
  • 26
  • 25
  • 1

Как удалить файлы определенного типа из командной строки или bat-файла

  • Содержание статьи
    • Описание
    • Комментарии к статье ( 3 шт )
    • Добавить комментарий

Описание

Очень часто возникает необходимость удалить все файлы с определенным расширением в каком-либо каталоге (или в каталоге и во всех его подкаталогах). Например, если мы хотим удалить все текстовые файлы с расширением *.txt в папке (и всех ее подпапках) C:texts, то можно выполнить следующую команду:

del /f /s /q C:texts*.txt

Где
/f — удаляет все файлы, даже если у них установлен атрибут только чтение
/s — удаляет файлы из всех подкаталогов (если это не требуется, то данный ключ нужно убрать)
/q — отключает запрос на подтверждение удаления файла
C:texts — каталог, в котором будут найдены и удалены все файлы. Вместо определенной папки, можно указать весь диск целиком, тогда выглядеть это будет так: C:*.txt
*.txt — тип файлов (расширение), которые будут удалены

Будьте аккуратны с ключем /q и типами удаляемых файлов. Команда удаляет, не спрашивая разрешения и при указании неправильного типа файлов может удалить лишнего.

BKPB

0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

1

VBS

Скрипт для удаления файлов и папок

03.02.2018, 19:20. Показов 23308. Ответов 93

Метки нет (Все метки)


Собрал из кусков скрипт для удаления файлов и папок.
Но проблема такая, если все указанные в скрипте файлы присутствуют в системе то он отрабатывает нормально.
А если какого нибудь файла или папки нет, то скрипт выдаёт ошибку: файл не найден и окно висит пока не закроешь вручную.
Помогите подправить или написать новый, чтобы не было такой ошибки.
Вот мой скрипт:

Visual Basic
1
2
3
4
5
6
7
8
9
' Задержка 1 секунда
WScript.Sleep 1*1000
' Удаление файла
WScript.CreateObject("Scripting.FileSystemObject").DeleteFile "C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication17.11.1.990service_update.exe", True
WScript.CreateObject("Scripting.FileSystemObject").DeleteFile "C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication17.11.1.990yupdate-exec.exe", True
' Задержка 1 секунда
WScript.Sleep 1*1000
' Удаление папки
WScript.CreateObject("Scripting.FileSystemObject").DeleteFolder "C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication17.11.1.990Installer", True

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

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



FlasherX

5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

03.02.2018, 20:14

2

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
With CreateObject("WScript.Shell")
    .CurrentDirectory = "C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication17.11.1.990"
    .Run "setup.exe",, 1 : .Run "затем ещё один.exe",, 1
End With
 
With CreateObject("Scripting.FileSystemObject")
    For Each N In Split("service_update.exe service_update.exe")
        If .FileExists(N) Then .DeleteFile N, 1
    Next
    If .FolderExists("Installer") Then .DeleteFolder "Installer", 1
End With



0



0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

03.02.2018, 21:24

 [ТС]

3

FlasherX,
Извините, что неверно указал информацию.
Файлы должны запуститься из папки Temp.
То-есть, мой SFX распаковывает файлы в Temp: Setup.exe и Settings.exe
и вот там их должен запустить этот скрипт.
Поправьте пожалуйста, чтобы сработало.
А то выдаёт ошибку:

Кликните здесь для просмотра всего текста

Строка: 2
Символ: 5
Ошибка: Системе не удается найти указанный путь.
Код: 80070003
Источник: (null)

Добавлено через 41 минуту
FlasherX,
Дело в том, что при распаковке моего инсталлятора SFX, запуск происходит не из самой папки TEMP,
а из C:UsersАдминистратор ПКAppDataLocalTempRarSFX0 и эта папка RarSFX0 всегда имеет разное имя,
то RarSFX0, то RarSFX1.



0



5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

03.02.2018, 21:54

4

Цитата
Сообщение от BKPB
Посмотреть сообщение

папка RarSFX0 всегда имеет разное имя, то RarSFX0, то RarSFX1.

RarSFX — несменное начало имени? И что, если этих папок несколько?



0



BKPB

0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

03.02.2018, 22:46

 [ТС]

5

FlasherX,
RarSFX несменное начало, но оно не бывает только RarSFX,
оно всегда либо RarSFX0(это если нез апущены какие либо другие портабле программы)
а если запущена хотя бы одна, тогда создаваемой папке назначается имя RarSFX1, т.к RarSFX0 уже занято предыдущей программой.
Мне тут давали подсказку для .cmd, когда была такая же поблема,
тоесть вот так не срабатывало потому что папка RarSFX0 всегда имела разное имя, то RarSFX0, то RarSFX1 и.т.д

Windows Batch file
1
2
3
4
5
6
Pushd "%Temp%"
 start " " /wait Setup.exe
 Popd
 ping -n 3 localhost>Nul
 Pushd "%Temp%"
 start " " /wait Settings.exe

А когда сделали так, всё заработало:

Windows Batch file
1
2
3
4
Pushd "%Temp%"
 start " " /wait "%~dp0Setup.exe"
 start " " /wait "%~dp0Settings.exe"
 Popd

Вот и в скрипте наверное нужно сделать что то подобное.



0



5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

03.02.2018, 23:55

6

BKPB, подсказки мне не нужны.
Я не понял. Написано «Вот мой скрипт». В первом посте пути и имена файлов фейковые или нет?
Если нет, то почему нет пути C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication 17.11.1.990 ?



0



0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

04.02.2018, 08:26

 [ТС]

7

FlasherX,
Ошибся это не скрипт, а пример сценария.
Имена не фейковые, а пути нет, потому что запуск происходит в папке RarSFX0 временно создающейся в директории
%TEMP% и имя RarSFX* всегда разное.



0



5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

04.02.2018, 11:33

8

Цитата
Сообщение от BKPB
Посмотреть сообщение

Имена не фейковые, а пути нет

Что-о-о-о?
service_update.exe, yupdate-exec.exe, Installer, Setup.exe и Settings.exe — все находятся в %TEMP%RarSFX*, не пойму?



0



YuS_2

Любознательный

3223 / 863 / 231

Регистрация: 10.03.2016

Сообщений: 2,039

04.02.2018, 12:05

9

Цитата
Сообщение от BKPB
Посмотреть сообщение

А когда сделали так, всё заработало:

Windows Batch file
1
2
3
4
Pushd "%Temp%"
start " " /wait "%~dp0Setup.exe"
start " " /wait "%~dp0Settings.exe"
Popd

Дословно:
1. Перейти во временный каталог, записанный в переменной окружения %temp%
2. Запустить, с ожиданием завершения работы, файл Setup.exe, расположенный в одном каталоге с пакетным сценарием ( не совсем понятно — зачем осуществлялся переход во временный каталог?)
3. Запустить, с ожиданием завершения работы, файл Settings.exe, расположенный в одном каталоге с пакетным сценарием ( тоже не совсем понятно — зачем же осуществлялся переход во временный каталог?)
4. Возврат в каталог, сохраненный командой pushd на первом шаге, перед тем как перейти в указанный каталог.
Итого:
Что там заработало — вопрос тот ещё… т.к. этот пакетник противоречит Вашему условию:

Цитата
Сообщение от BKPB
Посмотреть сообщение

То-есть, мой SFX распаковывает файлы в Temp: Setup.exe и Settings.exe

Цитата
Сообщение от BKPB
Посмотреть сообщение

Имена не фейковые, а пути нет, потому что запуск происходит в папке RarSFX0 временно создающейся в директории
%TEMP% и имя RarSFX* всегда разное.

В общем, разберитесь подробнее, где что создается и где что требуется запустить, после чего скорректируйте условие… если, конечно, есть желание, чтобы «всё заработало».



0



BKPB

0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

04.02.2018, 12:57

 [ТС]

10

Не знаю, как объяснить.
2. Запустить, с ожиданием завершения работы, файл Setup.exe, расположенный в одном каталоге с пакетным сценарием ( не совсем понятно — зачем же осуществлялся переход во временный каталог ?
Почему из %temp% ? Потому, что я беру выдернутые из официального инсталлятора файлы
browser.7z, Setup.exe и самораспаковывающийся архив Settings.exe.
Запаковываю их в WinRarSFX архив и указываю в нём извлечь файлы во временную папку.
Чтобы произвести от туда их запуск, по очереди.
Для этого мне и нужен скрипт который запустил бы их с задержкой между запуском Setup.exe и Settings.exe.
А WinRarSFX архив и извлекает во временный каталог, а после установки удаляет извлечённые файлы.
Вот батник который всё это выполняет, но мне нужен скрипт.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
Pushd "%Temp%"
start " " /wait "%~dp0Setup.exe"
ping -n 2 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Ђ¤¬Ё*Ёбва*в®а ЏЉAppDataLocalYandexYandexBrowserApplication17.11.1.990yupdate-exec.exe"
del "C:UsersЂ¤¬Ё*Ёбва*в®а ЏЉAppDataLocalYandexYandexBrowserApplication17.11.1.990service_update.exe"
rd /s /q "C:UsersЂ¤¬ЁЁбва*в®а ЏЉAppDataLocalYandexYandexBrowserApplication17.11.1.990Installer"

Ђ¤¬ЁЁбва*в®а ЏЉ в пути, это Администратор ПК в кодировке 866 иначе батник не удаляет нужные файлы



0



5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

04.02.2018, 13:08

11

BKPB, хотите обсуждать батники, идите в раздел для них. Хотите, чтобы вам помогли здесь, ответьте на вопрос.



0



0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

04.02.2018, 13:59

 [ТС]

12

FlasherX,
Если вы имеете ввиду вопрос:

Кликните здесь для просмотра всего текста

А когда сделали так, всё заработало:
Pushd «%Temp%»
start » » /wait «%~dp0Setup.exe»
start » » /wait «%~dp0Settings.exe»
Popd

То ответ, ДА.
Или на какой вопрос я не ответил?
Я не обсуждаю батник.
Я просто подумал, раз не получается написать скрипт,
может кто то основываясь на батнике создаст или как нибудь конвертирует его,
что то типа этого. Вот и всё.



0



5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

04.02.2018, 14:04

13

Цитата
Сообщение от BKPB
Посмотреть сообщение

Если вы имеете ввиду вопрос:

Это не вопрос, и ко мне он отношения не имеет.

Цитата
Сообщение от BKPB
Посмотреть сообщение

Или на какой вопрос я не ответил?

На мой, естественно.



0



0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

04.02.2018, 14:17

 [ТС]

14

service_update.exe, yupdate-exec.exe, Installer, Setup.exe и Settings.exe — все находятся в %TEMP%RarSFX*, не пойму?
Этот вопрос ?

В %TEMP%RarSFX* находятся только файлы Setup.exe и Settings.exe,
а файлы service_update.exe, yupdate-exec.exe и папка Installer,
будут находится в папке программы когда она установится и вот от туда мне и нужно будет их удалить
после того как программа закончит установку и распакуются настройки.
(C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication 17.11.1.990)



0



FlasherX

5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

04.02.2018, 14:48

15

Понятно. В общем, сами в своих показаниях запутались. Иначе бы давно получили готовый ответ:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
With CreateObject("Scripting.FileSystemObject")
    P = .GetSpecialFolder(2) : Path = """" & P & "RarSFX0"
    If .FolderExists(P & "RarSFX1") Then Path = """" & P & "RarSFX1"
    With CreateObject("WScript.Shell")
        .Run Path & "setup.exe""",, 1 : .Run Path & "Settings.exe""",, 1
        .CurrentDirectory = .Environment("Process")("LocalAppData") & "YandexYandexBrowserApplication17.11.1.990"
    End With
    For Each N In Split("service_update.exe yupdate-exec.exe")
        If .FileExists(N) Then .DeleteFile N, 1
    Next
    If .FolderExists("Installer") Then .DeleteFolder "Installer", 1
End With



0



0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

04.02.2018, 14:55

 [ТС]

16

FlasherX,
Выдаёт ошибку.

Кликните здесь для просмотра всего текста

Сценарий:
C:UsersW7D~lAppDataLocalTempRarSFX0Setup.vbs
Строка: 5
Символ: 5
Ошибка: Не удается найти указанный файл.
Код: 80070002
Источник: (null)



0



5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

04.02.2018, 15:02

17

BKPB, значит, файла C:UsersАдминистратор ПКAppDataLocalTempRarSFX(0/1)setup.exe нет. А скрипт, как вы объясняли, запускается после распаковки SFX.

Администратор ПК, кстати, — это активный профиль?



0



0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

04.02.2018, 17:14

 [ТС]

18

FlasherX,
Всё равно выдаёт ошибку:

Кликните здесь для просмотра всего текста

Сценарий:
C:UsersA47D-lAppDataLocalTempRarSFX0Setup.vbs
Строка: 5
Символ: 9
Ошибка: Не удается найти указанный файл.
Код: 80070002
Источник: (null)

Администратор ПК, кстати, — это активный профиль?
Да, активный, других учётных записей нет.
Скриншот:

Миниатюры

Скрипт для удаления файлов и папок
 



0



5294 / 2483 / 988

Регистрация: 06.06.2017

Сообщений: 8,500

04.02.2018, 17:34

19

BKPB, значит, есть папка RarSFX1, в которой с ваших слов и надо искать эти файлы:

а если запущена хотя бы одна, тогда создаваемой папке назначается имя RarSFX1, т.к RarSFX0 уже занято предыдущей программой.

Скрипт проверяет сущетсвование папки RarSFX1. Если она есть, то файлы запускаются из неё.



0



0 / 0 / 0

Регистрация: 08.05.2015

Сообщений: 222

04.02.2018, 17:55

 [ТС]

20

Ещё скриншот:

Скрипт для удаления файлов и папок

Добавлено через 6 минут
Да нет же, файлы должны запустится из любой папки которая создастся, если свободно RarSFX0 значит из неё, если занято,
значит из RarSFX1, если и она (что очень, очень редко бывает), то из RarSFX3 т.к их создаёт сам SFX WinRar архив.

Добавлено через 12 минут
Скрипт проверяет сущетсвование папки RarSFX1. Если она есть, то файлы запускаются из неё.
В общем заменил в скрипте RarSFX1 на RarSFX0 и установка прошла но с ошибкой.
т.к после выполнения Setup.exe, нужна пауза 7 сек, потом завершить процессы
browser.exe и service_update.exe иначе они не дают распаковаться настройкам (Settings.exe)
в папку с программой, потом пауза на 2 сек перед запуском Settings.exe (настройки),
далее пауза 1 сек и далее удаление ненужных файлов из
C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication 17.11.1.990yupdate-exec.exe
C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication 17.11.1.990service_update.exe
C:UsersАдминистратор ПКAppDataLocalYandexYandexBrowserApplication 17.11.1.990Installerbrowser.7z
и всё.



0



Понравилась статья? Поделить с друзьями:
  • Скрин в буфер обмена windows 10
  • Скрыть панель задач windows 10 горячие клавиши
  • Скрипт для удаления нежелательных обновлений windows 7
  • Скретч скачать бесплатно для windows 7
  • Скрипт для создания пользователей windows server