2015-09-21 3 views
1

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

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

Редактировать: Я обновил код до полного кода. Программа предназначена для получения лицензионных ключей Windows на всех компьютерах в лабораториях, которыми я управляю, для удобства использования. Я прошу прощения, если проблема проста, это мой первый скрипт, который я написал, и я чувствую, что это то, что мне кажется просто не хватает.

Код в вопросе:

Set WshShell = CreateObject("WScript.Shell") 
ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")) 
Set wshShell = CreateObject("WScript.Shell") 
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 

Function ConvertToKey(Key) 
    Const KeyOffset = 52 
    i = 28 
    Chars = "BCDFGHJKMPQRTVWXY2346789" 
    Do 
    Cur = 0 
    x = 14 
    Do 
     Cur = Cur * 256 
     Cur = Key(x + KeyOffset) + Cur 
     Key(x + KeyOffset) = (Cur \ 24) And 255 
     Cur = Cur Mod 24 
     x = x - 1 
    Loop While x >= 0 
    i = i - 1 
    KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput 
    If (((29 - i) Mod 6) = 0) And (i <> -1) Then 
     i = i - 1 
     KeyOutput = "-" & KeyOutput 
    End If 
    Loop While i >= 0 
    ConvertToKey = KeyOutput 
    Dim filesys, filetxt, getname, path 
    Set filesys = CreateObject("Scripting.FileSystemObject") 
    Set filetxt = filesys.CreateTextFile("I:\"& strComputerName & ".txt", True) 
    path = filesys.GetAbsolutePathName("I:\"& strComputerName & ".txt") 
    getname = filesys.GetFileName(path) 
    filetxt.WriteLine(KeyOutPut) 
    filetxt.Close 
End Function 

Результат представляет собой текстовый файл с именем «.txt» в правильном месте.

+1

В коде отсутствует явная ошибка, если у вас нет прав на этот диск, чтобы создать файл, или имена ваших машин содержат недопустимые символы (маловероятно). Вы пытались проверить значения 'strComputerName'? Вы правильно определили 'wshShell'? –

+0

Использовали ли вы On Error Resume Next? Вы объявили эту переменную wshShell? Вы должны отредактировать свой вопрос и добавить код дырки! – Hackoo

ответ

0

Вы должны передать strComputerName в функцию и предидировать вызов с помощью ключевого слова Call.

+0

Ключевое слово 'Call' требуется только в том случае, если вы используете круглые скобки вокруг аргументов. Это также сработало бы: 'ConvertToKey WshShell.RegRead (" ... "), WshShell.ExpandEnvironmentStrings ("% COMPUTERNAME% ")'. Или вы могли бы переместить 'strComputerName = wshShell.ExpandEnvironmentStrings ("% COMPUTERNAME% ")' * перед * вызовом 'ConvertToKey'. Проблема была в том, что вы использовали переменную 'strComputerName', прежде чем она была определена. –

Смежные вопросы