переименуйте файл, используя VBScript, запустите файл, подождите и снова переименуйте - PullRequest
0 голосов
/ 23 февраля 2019

Мне нужно создать скрипт vbs (для обслуживания), который переименовывает foo.txt в foo.bat и запускает foo.bat, а когда foo.bat заканчивается, переименуйте foo.bat снова в foo.txt

Это мой скрипт vbs:

On Error Resume next
Dim Fso
Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
Fso.MoveFile "foo.txt", "foo.bat"

SCRIPT = "foo.bat"
Set objShell = CreateObject("Wscript.Shell")
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile) 

NewPath = objFSO.BuildPath(strFolder, SCRIPT)
set objshell = createobject("wscript.shell")
objshell.Run NewPath, vbHide, true

Fso.MoveFile "foo.bat", "foo.txt"

On Error GoTo 0

скрипт выполняется хорошо.Переименуйте foo.txt в foo.bat.Запускает foo.bat, но не ожидает окончания работы foo.bat и переименовывает его в foo.txt.

Я изменил эту строку, ничего не происходит:

objshell.Run NewPath, vbHide, 1, true

Что мне нужно или что я сделал не так?

Альтернативное решение (без VBScript): (По предложению @KenWhite)

код:

On Error Resume next
Dim Fso
Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
Fso.MoveFile "foo.txt", "foo.bat"

SCRIPT = "foo.bat"
Set objShell = CreateObject("Wscript.Shell")
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile) 

NewPath = objFSO.BuildPath(strFolder, SCRIPT)
set objshell = createobject("wscript.shell")
objshell.Run NewPath, true

On Error GoTo 0

И в конце foo.bat:

ren foo.bat foo.txt
exit

Спасибо

1 Ответ

0 голосов
/ 23 февраля 2019

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

Dim Fso
Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
Fso.MoveFile "foo.txt", "foo.bat"

SCRIPT = "foo.bat"
Set objShell = CreateObject("Wscript.Shell")
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile) 

NewPath = objFSO.BuildPath(strFolder, SCRIPT)
set objshell = createobject("wscript.shell")

objshell.Run "%COMSPEC% /c " & NewPath, 1, true

' Changes start here
'===================================================================

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

' Hold execution until cmd.exe process is done
do 
    ' Get cmd.exe processes
    Set colProcessList = objWMIService.ExecQuery _
    ("Select Name from Win32_Process WHERE Name LIKE 'cmd.exe'")
    WScript.Sleep 250
Loop while colProcessList.count > 0

Fso.MoveFile "foo.bat", "foo.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...