Показать полную графическую версию : [решено] Удалить файл с переменной в пути
Прошу не судить строго. Первый день с VBS.
Надо проверить папку system32 на наличие файла file.txt, и удалить его если он там есть.
Вот так скрипт отрабатывает корректно:
Set obj = CreateObject("Scripting.FileSystemObject")
if obj.FileExists("C:\WINDOWS\system32\file.txt") then obj.DeleteFile("C:\WINDOWS\system32\file.txt")
А с переменной среды Windows в пути не работает :(
Set obj = CreateObject("Scripting.FileSystemObject")
if obj.FileExists("%windows%\system32\file.txt") then obj.DeleteFile("%windows%\system32\file.txt")
Знаю что надо использовать метод ExpandEnvironmentStrings, но как не знаю.
Кажись, работает так:
Dim WINDIR, WshShell, objFSO
Set WshShell = CreateObject("Wscript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
WINDIR = WshShell.ExpandEnvironmentStrings("%WINDIR%/system32")
Set obj = CreateObject("Scripting.FileSystemObject")
if obj.FileExists (WINDIR & "\file.txt") then objFSO.DeleteFile(WINDIR & "\file.txt")
Надо проверить папку system32 на наличие файла file.txt, и удалить его если он там есть. »
Option Explicit
Const SystemFolder = 1
Dim strPath
With WScript.CreateObject("Scripting.FileSystemObject")
strPath = .BuildPath(.GetSpecialFolder(SystemFolder).Path, "file.txt")
If .FileExists(strPath) Then
.DeleteFile strPath, True
End If
End With
WScript.Quit 0
Знаю что надо использовать метод ExpandEnvironmentStrings, но как не знаю. »
Option Explicit
Dim strPath
With WScript.CreateObject("Scripting.FileSystemObject")
strPath = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%SystemRoot%\System32\file.txt")
If .FileExists(strPath) Then
.DeleteFile strPath, True
End If
End With
WScript.Quit 0
Но правильнее — использовать первый код.
Спасибо. А как перед этим убить процесс notepad.exe?
Вот этот скрипт убивает:
strComputer = "."
strProcsToKill = "notepad.exe"
Set wbemObjectSet = GetObject("winmgmts://" & strComputer).InstancesOf("Win32_Process")
For Each wbemObject In wbemObjectSet
If LCase(wbemObject.Name) = strProcsToKill Then wbemObject.Terminate
Next
но не знаю как объединить его с этим:
Option Explicit
Const SystemFolder = 1
Dim strPath
With WScript.CreateObject("Scripting.FileSystemObject")
strPath = .BuildPath(.GetSpecialFolder(SystemFolder).Path, "file.txt")
If .FileExists(strPath) Then
.DeleteFile strPath, True
End If
End With
WScript.Quit 0
Например, так:
Option Explicit
Const SystemFolder = 1
Dim objSWbemObjectEx
Dim strPath
For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").ExecQuery("SELECT * FROM Win32_Process WHERE Name='notepad.exe'")
objSWbemObjectEx.Terminate
Next
With WScript.CreateObject("Scripting.FileSystemObject")
strPath = .BuildPath(.GetSpecialFolder(SystemFolder).Path, "file.txt")
If .FileExists(strPath) Then
.DeleteFile strPath, True
End If
End With
WScript.Quit 0
Все работает идеально. Благодарю.
Ну и вдогонку:
%windows% »
Нет такой переменной среды. Есть %windir%.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC