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

viliam 18-06-2014 11:30 2365604

Удалить файл с переменной в пути
 
Прошу не судить строго. Первый день с 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 2365624

Кажись, работает так:

Код:

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 2365629

Цитата:

Цитата viliam
Надо проверить папку 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

Цитата:

Цитата viliam
Знаю что надо использовать метод 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 2365686

Спасибо. А как перед этим убить процесс 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 2365693

Например, так:
Код:

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 2365712

Все работает идеально. Благодарю.

mwz 19-06-2014 13:34 2366123

Ну и вдогонку:
Цитата:

Цитата viliam
%windows% »

Нет такой переменной среды. Есть %windir%.


Время: 20:46.

Время: 20:46.
© OSzone.net 2001-