PDA

Показать полную графическую версию : [решено] Удалить файл с переменной в пути


viliam
18-06-2014, 11:30
Прошу не судить строго. Первый день с 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, но как не знаю.

viliam
18-06-2014, 12:18
Кажись, работает так:

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")

Iska
18-06-2014, 12:27
Надо проверить папку 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

Но правильнее — использовать первый код.

viliam
18-06-2014, 14:41
Спасибо. А как перед этим убить процесс 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

Iska
18-06-2014, 15:00
Например, так:
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

viliam
18-06-2014, 15:44
Все работает идеально. Благодарю.

mwz
19-06-2014, 13:34
Ну и вдогонку:
%windows% »
Нет такой переменной среды. Есть %windir%.




© OSzone.net 2001-2012