Вопрос Vbscript о выводе обнаружения файловой системы в переменную?(ОС XPHome NTFS) - PullRequest
0 голосов
/ 21 апреля 2019

Я надеюсь, что кто-то с опытом работы с Vbscripting сможет помочь мне с Vbscript (Моя ОС - XP Home с файловой системой NTFS, пожалуйста, я не могу использовать WMI в коде Vbs из-за ОС)

Я посмотрел на www и нашел два фрагмента VBscript, которые (1) найдут текущую файловую систему на диске C: \ (% systemdrive%), а второй фрагмент кода идентифицирует файловую систему ОС, однако я действительно хочу для объединения двух частей кода & (2) выходные данные предпочтительно будут переменной, а не msgbox, который будет получен позже в пакетном файле. Фрагменты кода следующие.

set shell = createobject("wscript.shell")
set environ = shell.environment("process")
systemdrive = environ("systemdrive")
msgbox systemdrive

set fso = CreateObject("Scripting.FileSystemObject")
set drive = fso.GetDrive("C")
Wscript.Echo "FileSystem     =", drive.FileSystem

Первый набор кода создает переменную с именем systemdrive и выводит ее в окно сообщения. Второй (в окне сообщения) выводит «Файловую систему» ​​в моем случае «NTFS».

У меня вопрос, когда я обмениваю информацию о системном приводе в строке set drive = fso.GetDrive ("C") - так, например, установите drive = fso.GetDrive ("systemdrive") вместо ("C") Я получаю сообщения с кодами ошибок. Также вместо вывода окна сообщения я ищу% variable% output вместо, например. Msgstr "FAT32, NTFS или что-то еще". Я надеюсь, что то, что я пытаюсь передать, имеет смысл? По сути, я пытаюсь использовать переменную systemdrive, обычно "C:" вместо жестко запрограммированного c: path, найти файловую систему ОС и выводить ее только в переменную?

1 Ответ

0 голосов
/ 21 апреля 2019

Насколько я понимаю, вы хотите обнаружить файловую систему диска и сохранить ее в переменной среды для последующего использования в пакетном файле.

Это означает, что вы планируете вызывать VBScript из этогопакетный файл и может использовать пакетный файл для разрешения любых переменных среды, таких как %SYSTEMDRIVE%, и нет необходимости делать это из файла VBS (что было бы возможно, но это будет более гибким, когда мы сможем передать вбуква диска в качестве параметра к скрипту).

Давайте создадим VBS, который принимает один аргумент и ищет тип файловой системы, если это возможно.

Option Explicit

Dim shell, fso, drive, driveletter

' we expect a single argument - a drive letter in the form X:
If WScript.Arguments.Unnamed.Count = 0 Then Die "Please specify drive letter."
driveletter = WScript.Arguments.Unnamed(0)

Set shell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

' try to get the drive object for that drive letter, die on error
On Error Resume Next
Set drive = fso.GetDrive(driveletter)
If Err.Number <> 0 Then Die "Could not detect filesystem type for " + driveletter + " (" + Err.Description + ")"

Wscript.StdOut.Write drive.FileSystem

Sub Die(message)
    WScript.StdErr.WriteLine message
    WScript.Quit 1
End Sub

Теперь это можно назвать автономным (для целей командной строки используйтеинтерпретатор сценария командной строки, cscript.exe):

cscript /nologo filesystem.vbs %SYSTEMDRIVE%

Или он может быть вызван из пакетного файла (мы будем использовать цикл for для присвоения вывода сценария переменной):

@echo off

for /f "usebackq delims=" %%s in (`cscript /nologo filesystem.vbs %SYSTEMDRIVE%`) do (
    set FILESYSTEM=%%s
)

echo The filesystem in %SYSTEMDRIVE% is %FILESYSTEM%.

Это напечатано выше для меня:

The filesystem in C: is NTFS.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...