Как удалить бат файл после выполнения
The above code deletes all the ".txt" and ".tsv" files from all the folders except from the folder TEST 100% . For deleting the files from TEST 100% i am getting the error as The Path could not be found . I guess the % symbol in the folder name creates the issue. Can anyone guide me to resolve the issue and to delete the files from the folder TEST 100% ?
Why do you have a quote on the first line? Also, why are you referring to the drive when your batch file already changed to that drive with the first line? I tried replicating your problem and everything worked. Did you confirm that Archive exists in Test 100%?
5 Answers 5
You need to escape the % with another.
I can't speak for the OP, but on my system there's no problem finding a path with %, and escaping with %% keeps the system from finding it.
@user1161318 - I did test it on Windows 7. Without the escape, in a batch file, results in "The system cannot find the path specified". As I posted it works.
You're probably right. I keep forgetting that within a batch file, % is a variable prefix and you need to escape it. +1
There's multiple ways of doing things in batch, so if escaping with a double percent %% isn't working for you, then you could try something like this:
set olddir=%CD% sets the variable "olddir" or any other variable name you like to the directory your batch file was launched from.
cd /d "path of folder" changes the current directory the batch will be looking at. keep the quotations and change path of folder to which ever path you aiming for.
del "file name/ or *.txt etc. " will delete the file in the current directory your batch is looking at, just don't add a directory path before the file name and just have the full file name or, to delete multiple files with the same extension with *.txt or whatever extension you need.
cd /d "%olddir%" takes the variable saved with your old path and goes back to the directory you started the batch with, its not important if you don't want the batch going back to its previous directory path, and like stated before the variable name can be changed to whatever you wish by changing the set olddir=%CD% line .
Есть bat скрипт на копирование и удаление файлов. Если запустить вручную, то скрипт отрабатывает. Однако если запустить скрипт из планировщика заданий, то файлы копируются, но не удаляются. Что делаю не так? Код ниже. ОС Windows Server 2008r2.
Проверьте права доступа на i:\sql\base, для пользователя под которым работает батник из шедулера.
Полезно, чтоб батник писал лог, ошибки каждой команды перенаправляйте в лог, например так:
Выполняется под администратором домена "Вне зависимости от регистрации пользователя"
Про лог мысль хорошая, попробую
Ну как-бы, администратор домена - это еще не царь горы :)
Разница при выполнении из шедулера и руками обычно в:
1.правах пользователя
2.отсутствие по умолчанию сетевых дисков
3.текущем каталоге
4.настройках PATH
2 - 4 пункты в данном случае не про вас, остается только 1. Конечно, если диск i - локальный.
Кстати, возможно файлы на момент удаления по шедулеру еще заняты (например, бэкап не закончился).
Вопрос. Имеется ошибка под администратором домена и только из планировщика, куда копать?
Не удается найти C:\Windows\system32\DEL Отказано в доступе.
Это забавно :-)
Вообще delа в природе нет - это встроенная команда cmd.exe.
Похоже у вас какой-то липовый cmd.exe.
Натравите в системе под админом: sfc /scannow - должна восстановить поврежденные/измененные системные файлы.
PS: вместо del можно использовать erase - это по сути псевдоним дела.
Что на счет команды в планировщике? В каком виде ее задаете?
Может быть еще такой вариант - поищите в каталогах, указанных в PATH исполняемый файл cmd.exe в каталогах, отличных от c:\Windows\Systems32 и SysWow64
res2001: Нашелся cmd.exe в C:\Windows\winsxs\wow64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7601.17514_none_f387767e655cd5ab
Ну тогда все таки это доступ.
"Не удается найти C:\Windows\system32\DEL Отказано в доступе."
Закоментируйте @echo off, если он есть и запускайте из шедулера так:
%WINDIR%\system32\cmd.exe /c 1>"%~dp0\log.txt" 2>&1
Потом смотрите вывод в log.txt.
Ну и если там что-то будет интересное давайте сюда.
И SyavaSyava прав - нужно делать так как он написал. Правда от этого ошибка не рассосется.
res2001: Во как: "Процесс не может получить доступ к файлу, так как этот файл занят другим процессом." Но других cmd не запущено. Файл тестовый и пустой (создан ручками), следовательно ни чем использоваться не может.
res2001: Проблема в другом - ни удаляется ни один файл из каталога.
батник С:\backupsql.bat , диск I: - физический, права у администратора домена конечно есть. Бэкапы лежат не настоящие, а пустые созданные блокнотом файлы. На диске С: проблема та же, сейчас проверил.
Значит нужно посмотреть, кто держит файл.
По моему в пакете SysInternals Suite есть нужная утилита. Скачайте его с сайта мелкософта.
Там точно есть diskmon - монитор дисковых операций.
Запустите перед стартом шедулера diskmon, настройте фильтр в дискмоне на ваш каталог и запускайте шедулер.
С помощью стандартного монитора ресурсов можно не обнаружить, т.к. операция быстрая, а там обновление по таймеру. А в дискмоне пишутся все обращения, как в логе.
res2001: не особо понял как настроить фильтр, в графическом интерфейсе есть поиск, вкл\выкл, сохранить и очистить.
Самоудаляющийся файл
Небольшая, но в то же время полезная развлекуха - самоудаляющийся исполняемый файл. Во времена MS-DOS подобным фокусом никого было не удивить, там операционная система позволяла писать что угодно куда угодно, и даже удалять исполняемый файл во время его выполнения (хе-хе. ). С появлением Windows вольница закончилась. Если файл запущен, то до того, как он завершит работу, ничего с ним сделать не получится. Но из этого правила есть одно исключение - так называемые пакетные или bat-файлы. Они выполняются не как самостоятельное приложение, а как набор инструкций для командного процессора, поэтому запросто могут удалять сами себя. Этим мы и воспользуемся для решения нашей задачи. Вот пример пакетного файла, который сперва пытается удалить файл по заданному пути, а затем самоуничтожается.
:loc
del "D:\Path\file.exe"
if exist "D:\Path\file.exe" goto loc
del %0
Проверка и цикл нужны для того, чтобы дождаться момента, когда файл освободится и станет доступным для ликвидации. Команда "del %0" удаляет bat-файл, в котором она выполняется, без привязки к его имени. Теперь, чтобы наш исполняемый файл самоудалялся, он должен выполнить следующие действия: получить имя и путь выполняемого файла, сформировать bat-файл, запустить его и завершить работу. bat-файл дождется окончания работы исполняемого файла, удалит его, затем удалит сам себя.
Осталось перевести человеческие слова на язык Ассемблера. Код получается достаточно простой, дополнительно комментировать его я не буду.
- ; сегмент данных
- . . .
- mask db ':loc' , 13 , 10
- db 'del "%s"' , 13 , 10
- db 'if exist "%s" goto loc' , 13 , 10
- db 'del %%0' , 0
- batext db '.bat' , 0
- fname rb MAX_PATH
- buff rb MAX_PATH * 3
Один момент все-таки проясню. Путь и имя файла преобразуется в DOS'овский "короткий" формат 8.3 на тот случай, если в нем содержатся какие-нибудь специальные символы или буквы не-латинского алфавита. При обычном написании пути пакетные файлы в таком случае могут отработать некорректно.
- ; сегмент кода
- . . .
- ; Получить имя файла
- invoke GetModuleFileName , 0 , buff , MAX_PATH
- ; Получить DOS'овское имя файла
- invoke GetShortPathName , buff , fname , MAX_PATH
- ; Сформировать bat-файл
- invoke wsprintf , buff , mask , fname , fname
- addesp , 16
- ; Размер полученного bat-файла
- movesi , eax
- ; Добавить расширение .bat
- invoke lstrcat , fname , batext
- ; Записать bat-файл
- invoke _lcreat , fname , 0
- cmpeax , - 1
- je @ f
- movebx , eax
- invoke _lwrite , ebx , buff , esi
- invoke _lclose , ebx
- ; Запустить файл на выполнение в скрытом режиме
- invoke WinExec , fname , SW_HIDE
- @ @ :
- invoke ExitProcess , 0
Где это можно использовать? Если в благих целях, то именно так должны работать правильные деинсталляторы программ. Хороший деинсталлятор не должен просить пользователя подчистить "хвосты" вручную, или еще хуже - молча завершать работу, оставляя в системе как минимум каталог установки с файлом деинсталлятора внутри. Хороший деинсталлятор тщательно удалит за собой все, включая сам деинсталлятор. В этом случае bat-файл придется дополнить командой удаления каталога с программой и запускать его вне этого каталога. На темной стороне Силы самоудаляющимся файлам тоже найдется применение. Например, какая-нибудь шпионская программа может тихонько самоликвидироваться после выполнения своих непосредственных задач, чтобы не вызывать подозрений у жертвы и не оставлять образцов для исследования.
Доброго времени суток. Столкнулся с такой проблемой:
Имеется: 6 компьютеров с Oculus Rift с клиентской игрой, и 1 компьютер серверный .
Требуется: При запуске 6 компьютеров игровых, надо что б автоматически запускалась программа для работы Oculus Rift (в настройке прграммы этой ф-ции нет), и клиент игры. Мониторов у компьютеров нет, да и не нужны они, но каждый раз при запуске вручную запускать довольно надоедливо, да и в случае неполадок, просто перезагрузить компьютер - было бы идеальным решением.
Что уже сделано: Самое интересное с чем я столкнулся, что Oculus не хотел запускаться обычными способами в автозапуске, если его ярлык поместить в автозагрузку, пробовал все варианты что знал сам и что нашел в интернете, реестр там, в папку в пуске автозагрузки, в общем тщетно. И только потом подумал, что можно сделать скрипт в .bat Файле , на запуск этих программ и уже bat файл встваить в автозагрузку, все заработало, только что требует каждый раз подтверждение администратора, просто нажать кнопку "ОК", но в этом теряется весь смысл, если для запуска надо опять по каждому компу проходить. В итоге вычитал где-то про планировщик задач, добавил в него выполнение бэтки, и поставил максимальные права, и выполнение этой задачи уже добавил в автозагрузку.
Радости моей не было предела, но единственное что иногда бывало что прграмма для очков Oculus не запускалась, не знаю почему, может не успевала , но если ее открыть еще раз вручную то все ок. В итоге решил так что добавил ожидание перед началом выполнение скрипта 10 секунд, что б комп успел сам загрузиться, потом выполнял запуск программы и игрового клиента, и после запуска добавил проверку, если этот процесс действительно появился в диспетчере задач, если ок, тогда ничего, иначе запусти ее еще раз. И всё стало супер, единственное что , после добавления этой проверки перестало закрываться само окно bat файла, как будто бы недоконца выполнился скрипт и он чего-то ждет, хотя обе программы уже запустились, но стоит закрыть вручную это bat окно , как программа Oculus закрывается тоже.
Собственно вопрос: Как сделать так что бы оно закрывалось после открытия обеих программ само (что в принципе оно и должно делать), просто уверен что прблема в написанном скрипте. Или как сделать так что б если его закрываешь, не закрывалась программа которую она открыла.
OculusClient.exe это программа для очков
Cosmos_Launcher.exe это сам клиент игры.
На скриншоте уже обе прграммы открыты, но окно не пропадает, и если его закрыть, то закроется сам Oculus.
Сам скрипт здесь:
Уверен что ошибка в моей писанине, то ли if не закрыт правильно, то ли exit не хватает, посоветуйте что-нибудь
И вопрос на будущее, возможно ли как-то в реальном времени проверять, если вдруг игровой клиент не запущен дважды, или запретить каким-то образом его запуск дважды.
Спасибо большое заранее за ваши ответы. Мой первый пост, до этого был только читателем, очень надеюсь на вашу помощь ;-)
1. положил logoff1.bat в Автозагрузку
2. Команда успешно выполнилась
3. Сам Bat не удалился.
4. Если запускать Bat не "автоматически", а ручками, то он удаляется.
В чем может быть проблема?
Спасибо!
Удаляется string после выполнения функции
Всем привет. Я начинающий в языке C++ и поэтому прошу помощи. У меня внутри функции создается.
Не удаляется почтовый ящик в программе The Bat
Не получается удалить почтовый ящик в программе The Bat. Нажал раздел - Ящик- Удалить почтовый.
В ярлыках браузеров emorhc.bat rehcnual.bat xoferif.bat erolpxei.bat
В ярлыках браузеров встроились вирусы и при открытии открывается реклама
Результат выполнения программы в консоли пропадает после выполнения скрипта
нужно отпарсить файл , но мне надо видеть что выводит сценарий , иначе мне его неотладить.
Решение
Выполнение элементов автозагрузки инициируется подсистемой, файлы которой расположены в \Windows\System32,
следовательно рабочий каталог где будет искаться файл для удаления (если не указать полный путь к нему) будет такой же.
Приостановка выполнения bat-файла
Запуск командного файла и приостановка его выполнения на заданную величину времени. Величина.
Отправка данных с bat во время его выполнения
Здравствуйте. Можете помочь с небольшой проблемой. У меня в программе есть текстовое поле с.
Приблизительная оценка времени выполнения файла AUTOEXEC.BAT
Здравствуйте! Подскажите, какой код написать в dose, что бы он приблизительно оценил время.
Internet Explorer не закрывается автоматически по ходу выполнения bat-файла
Помогите с решением, плз есть батничек: @set @x=0 @echo on "C:\Program Files\Internet.
Вывод результата выполнения команд вызываемого bat-ника в Label
Всем доброго времени суток! Хочу сделать gui для своих батников. Фрейм условно можно разделить на.
Читайте также: