---
title: "Spara till textfil med Visaul Basic script?!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/74684-spara-till-textfil-med-visaul-basic-script"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Dr-man"
published: "2003-04-22T11:35:13.000Z"
updated: "2005-06-01T12:59:47.000Z"
replies: 20
views: 626
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/74684-spara-till-textfil-med-visaul-basic-script"
---

# Spara till textfil med Visaul Basic script?!

_Sida 1 av 2._

## #1 — Dr-man, 2003-04-22T11:35Z

Jag skulle vilja spara informationen som denna kod ger till 
en textfil. Men vet inte hur? Kan nån hjälpa mig?! 

```
Set objDomain = GetObject("WinNT://VNS" & strDomain) 
objDomain.Filter = Array("user") 
For each objUser in objDomain 
objUser.GetInfo 
WScript.echo objUser.Name & ", " & objUser.LoginScript 
Next
```

Permalänk: https://www.webforum.nu/p/74684

## #2 — Dr-man, 2003-04-22T12:44Z

Nu jag byggt lite vidare på koden 

```
Set objDomain = GetObject("WinNT://VNS" & strDomain) 
objDomain.Filter = Array("user") 
For each objUser in objDomain 
  objUser.GetInfo 
  WScript.echo objUser.Name & ", " & objUser.LoginScript 
  Set fs = CreateObject("Scripting.FileSystemObject") 
  Set a = fs.CreateTextFile("f:\testfile.txt", True) 
  a.Write(objUser.Name) 
  a.Write(" ") 
  a.WriteLine(objUser.LoginScript) 
  a.Close 
Next
```

 

Det fungerar någorlunda. Två fel, som jag har med den är: 
1) Slippa att trycka på OK varje gång loopen körs. 
2) Den sparas endast den sista körda loopens info i textfilen 

Är det nån som kan hjälpa med detta?

Permalänk: https://www.webforum.nu/p/1019170

## #3 — Engine^, 2003-04-22T13:46Z

Iochmed att du använder WScript.Echo kommer du inte undan att trycka på Ok, eftersom den genererar en Message box. Koden kanske du kan möblera om lite och få en liten förbättring

```
Set objDomain = GetObject("WinNT://VNS" & strDomain) 
objDomain.Filter = Array("user") 

Set fs = CreateObject("Scripting.FileSystemObject") 
Set a = fs.CreateTextFile("f:\testfile.txt", True) 

For each objUser in objDomain 
  objUser.GetInfo 
  [blue]'WScript.echo objUser.Name & ", " & objUser.LoginScript [/blue]

  a.Write(objUser.Name) 
  a.Write(" ") 
  a.WriteLine(objUser.LoginScript) 
Next 

a.Close
```

Nu kommer koden inte att skriva över filen du skapar varje gång loopen körs, eftersom i det här fallet skapas filen endast en gång ;)

Permalänk: https://www.webforum.nu/p/1019211

## #4 — Dr-man, 2003-04-23T16:31Z

Hur kan man lagra informationen till en MySQL-databasen?

Permalänk: https://www.webforum.nu/p/1023128

## #5 — mrblonde, 2003-04-24T07:30Z

Du får skapa en databas och en tabell att spara datat i och sen får du göre en INSERT till den tabellen för varje loop du går igenom.

Permalänk: https://www.webforum.nu/p/1023580

## #6 — Dr-man, 2003-05-15T06:24Z

Med objUser.FullName kan det listas bl.a namnen 
Ville Person 
Kalle Berg 
Pelle Kanin 
Lisa Holm 

Hur skall man göra så att i samma textfil skriver namnen pånytt 
men istället för att skriva ut det fullständiga namnet, så skrivs de två första tecknen av förnamnen och tre sista tecknen av efternamnen?

Permalänk: https://www.webforum.nu/p/1049717

## #7 — Engine^, 2003-05-15T06:35Z

```
strNamn = objUser.FullName
strNamn = Left(strnamn, 2) & Right(strNamn, 3)

a.Write(strNamn)
```

Så ungefär?

Permalänk: https://www.webforum.nu/p/1049721

## #8 — Dr-man, 2003-05-15T08:10Z

Just i den stilen!
Men istället de tre första tecknen i förnamnet och fyra första namnen i efternamnet, går det att göra detta?

Permalänk: https://www.webforum.nu/p/1049765

## #9 — @nders, 2003-05-15T08:15Z

Jo, det går att göra på ett par olika sätt om man använder de strängfunktioner som finns i vbscript. Ett förslag är att använda [Split()](http://msdn.microsoft.com/library/en-us/script56/html/vsfctsplit.asp) tillsammans med Left().

Mvh

Permalänk: https://www.webforum.nu/p/1049767

## #10 — Engine^, 2003-05-15T08:25Z

```
Dim astrNamn(), strNamn

astrNamn = Split(objUser.FullName, " ")

strNamn = Left(astrNamn(0), 3) & Left(astrNamn(1), 4)
```

eller

```
strNamn = Left(Split(objUser.FullName, " ")(0), 3) & Left(Split(objUser.FullName, " ")(1), 4)
```

Permalänk: https://www.webforum.nu/p/1049778

## #11 — Dr-man, 2003-05-15T08:52Z

Nu fungerar det nästan utmärkt, men ett litet problem ännu!
Problemet är att vissa namn med objUser.FullName har endast ett förnamn och när ett sådant namn körs med Split fås följande
felmeddelande:

Script: U:\\Scripts\\vns4.vbs
Line: 24
Char: 6
Error: Subscript out of range: '\[number: 1\]'
Code:800A0009
Source: Microsoft VBScript runtime error

Vad kan man göra åt detta?

Permalänk: https://www.webforum.nu/p/1049794

## #12 — @nders, 2003-05-15T08:54Z

> **Dr-man skrev:**
>
> Vad kan man göra åt detta?

Man kan slänga in en if-sats som kontrollerar det först.

Permalänk: https://www.webforum.nu/p/1049796

## #13 — Engine^, 2003-05-15T09:10Z

```
astrNamn = Split(objUser.FullName, " ")
strNamn = Left(astrNamn(0), 3)

If Ubound(astrNamn) > 0 Then strNamn = strNamn & Left(astrNamn(1), 4)
```

Permalänk: https://www.webforum.nu/p/1049810

## #14 — Dr-man, 2003-05-15T09:52Z

```php
Dim nr, nr2, strn, astrn

WScript.echo "Tryck OK för att starta!"

Set fs = CreateObject("Scripting.FileSystemObject") 
Set a = fs.CreateTextFile("f:\testen.txt", True) 

Set gs = CreateObject("Scripting.FileSystemObject") 
Set b = gs.CreateTextFile("f:\testen2.txt", True) 

nr = 0
nr2 = 0

Set objDomain = GetObject("WinNT://VNS" & strDomain) 
objDomain.Filter = Array("user") 
For each objUser in objDomain 
  objUser.GetInfo 
  if objUser.LoginScript = "" then
     nr = nr + 1
     astrn = Split(objUser.FullName, " ")
     If Ubound(astrNamn) > 0 Then 
       strNamnstrn = Left(astrn(0), 3) & Left(astrn(1), 4)
     End If
     a.WriteLine(nr & " | " & objUser.FullName & "  |  " & objUser.Name)
  else
     nr2 = nr2 + 1
     astrn = Split(objUser.FullName, " ")
     If Ubound(astrNamn) > 0 Then 
       strNamnstrn = Left(astrn(0), 3) & Left(astrn(1), 4)
     End If
     b.WriteLine(nr2 & " | " & objUser.FullName & "  |  " & objUser.Name & "  |  " & objUser.LoginScript & " | " & strn)
  end if
Next 
a.Close 
b.Close 
WScript.echo "Proceduren är slutförd"
```

 

Här är hela koden för vb-scriptet.
Den klagar ännu på detta:
Error: Type mismatch: 'Ubound'

Permalänk: https://www.webforum.nu/p/1049844

## #15 — @nders, 2003-05-15T09:54Z

```
     [b]astrn[/b] = split(objUser.FullName, " ")
     If Ubound([b]astrNamn[/b]) > 0 Then
```

Finn ett fel. :)

**red:** Läs också [här](http://www.webforum.nu/showthread.php?s=&postid=624678#post624678). ;)

Permalänk: https://www.webforum.nu/p/1049847

## #16 — Dr-man, 2003-05-15T10:18Z

Den rätta koden är:

```php
Dim nr, nr2, strn, astrn

WScript.echo "Tryck OK för att starta!"

Set fs = CreateObject("Scripting.FileSystemObject") 
Set a = fs.CreateTextFile("f:\testen.txt", True) 

Set gs = CreateObject("Scripting.FileSystemObject") 
Set b = gs.CreateTextFile("f:\testen2.txt", True) 

nr = 0
nr2 = 0

Set objDomain = GetObject("WinNT://VNS" & strDomain) 
objDomain.Filter = Array("user") 
For each objUser in objDomain 
  objUser.GetInfo 
  if objUser.LoginScript = "" then
     nr = nr + 1
     astrn = Split(objUser.FullName, " ")
     If Ubound(astrn) > 0 Then 
       strn = Left(astrn(0), 3) & Left(astrn(1), 4)
     End If
     a.WriteLine(nr & " | " & objUser.FullName & "  |  " & objUser.Name & " | " & strn)
  else
     nr2 = nr2 + 1
     astrn = Split(objUser.FullName, " ")
     If Ubound(astrn) > 0 Then 
       strn = Left(astrn(0), 3) & Left(astrn(1), 4)
     End If
     b.WriteLine(nr2 & " | " & objUser.FullName & "  |  " & objUser.Name & "  |  " & objUser.LoginScript & " | " & strn)
  end if
Next 
a.Close 
b.Close 
WScript.echo "Proceduren är slutförd"
```

 

Lite förbättringar, går det göra så att scriptet hoppar över eventuella bindestreck och tar följande tecken istället?

En liten bugg ifall förnamnet är tre tecken, så tar endast scriptet de tre första tecknen av efternamnet istället för fyra tecken!

Nån, som kan hjälpa till?

Permalänk: https://www.webforum.nu/p/1049862

## #17 — Engine^, 2003-05-15T11:32Z

```
If Ubound(astrn) > 0 Then 
  If Len(astrn(0)) <= 3 Then
    strn = Left(astrn(0), Len(astrn(0)))
  Else
    strn = Left(astrn(0), 3)
  End If

  If Len(astrn(1)) <= 4 Then
    strn = strn & Left(astrn(1), Len(astrn(1)))
  Else
    strn = strn & Left(astrn(1), 4)
  End If
Else [blue]'Denna else-sats kanske är helt onödig, men den får vara med[/blue] ;)
  If Len(astrn(0)) <= 3 Then
    strn = Left(astrn(0), Len(astrn(0)))
  Else
    strn = Left(astrn(0), 3)
End If
```

Permalänk: https://www.webforum.nu/p/1049903

## #18 — Dr-man, 2003-05-15T11:54Z

```php
Dim nr, nr2, strn, astrn

WScript.echo "Tryck OK för att starta!"

Set fs = CreateObject("Scripting.FileSystemObject") 
Set a = fs.CreateTextFile("f:\testen.txt", True) 

Set gs = CreateObject("Scripting.FileSystemObject") 
Set b = gs.CreateTextFile("f:\testen2.txt", True) 

nr = 0
nr2 = 0

Set objDomain = GetObject("WinNT://VNS" & strDomain) 
objDomain.Filter = Array("user") 
For each objUser in objDomain 
  objUser.GetInfo 
  if objUser.LoginScript = "" then
     nr = nr + 1
     astrn = Split(objUser.FullName, " ")
     If Ubound(astrn) > 0 Then 
      If Len(astrn(0)) <= 3 Then
         strn = Left(astrn(0), Len(astrn(0)))
      Else
        strn = Left(astrn(0), 3)
      End If

      If Len(astrn(1)) <= 4 Then
        strn = strn & Left(astrn(1), Len(astrn(1)))
      Else
        strn = strn & Left(astrn(1), 4)
      End If
    'Else  
      If Len(astrn(0)) <= 3 Then
        strn = Left(astrn(0), Len(astrn(0)))
      Else
        strn = Left(astrn(0), 3)
      End If'

    End If
     a.WriteLine(nr & " | " & objUser.FullName & "  |  " & objUser.Name & " | " & strn)
  else
     nr2 = nr2 + 1
     astrn = Split(objUser.FullName, " ")
     If Ubound(astrn) > 0 Then 
      If Len(astrn(0)) <= 3 Then
         strn = Left(astrn(0), Len(astrn(0)))
      Else
        strn = Left(astrn(0), 3)
      End If

      If Len(astrn(1)) <= 4 Then
        strn = strn & Left(astrn(1), Len(astrn(1)))
      Else
        strn = strn & Left(astrn(1), 4)
      End If
    'Else  
      If Len(astrn(0)) <= 3 Then
        strn = Left(astrn(0), Len(astrn(0)))
      Else
        strn = Left(astrn(0), 3)
      End If'

    End If
     b.WriteLine(nr2 & " | " & objUser.FullName & "  |  " & objUser.Name & "  |  " & objUser.LoginScript & " | " & strn)
  end if
Next 
a.Close 
b.Close 
WScript.echo "Proceduren är slutförd"
```

 

Men denna kodsnutt, så ger den bara de tre första tecknen i efternamnet och inget annat! Är det nåt fel i kodsnutten?

Permalänk: https://www.webforum.nu/p/1049915

## #19 — Dr-man, 2003-05-15T14:29Z

Ingen, som kan se ifall det är nå fel med kodsnutten?

Permalänk: https://www.webforum.nu/p/1050072

## #20 — Dr-man, 2003-05-16T06:05Z

En annan fråga!
Kan man få denna information automatiskt öppnat i Excel?

Permalänk: https://www.webforum.nu/p/1050525

---

Tråden på webben: https://www.webforum.nu/amne/asp/74684-spara-till-textfil-med-visaul-basic-script  
Nästa sida: https://www.webforum.nu/amne/asp/74684-spara-till-textfil-med-visaul-basic-script/page2.md
