WinFuture-Forum.de: ausgewählte Dateien + Ordner per VBScript verschieben - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

ausgewählte Dateien + Ordner per VBScript verschieben


#1 Mitglied ist offline   je77 

  • Gruppe: aktive Mitglieder
  • Beiträge: 27
  • Beigetreten: 25. Januar 18
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 13. Juli 2018 - 13:44

Hallo, ich bin Beginner in VBScript und würde gerne per VBScript folgendes programmieren:

Ich möchte im WinExplorer ausgewählte Dateien und Ordner (mit sämtlichen Inhalt, also Unterordner, Dateien...) auf ein VBScript ziehen. Dann soll alles in den Ordner "D:\gelöscht\" verschoben werden. Für Dateien habe ich es hinbekommen, aber wie macht man das mit den Ordnern?

Es sollen ja Dateien und Ordner gemeinsam auf das Script gezogen werden. Was muss ich da tun?

Vielen Dank für die Hilfe im Voraus!!

Viele Grüße, je77

Dim s,fso,args,quelldateipfad
Set s=CreateObject("Wscript.Shell")
Set fso=CreateObject("Scripting.Filesystemobject")
Set args=WScript.Arguments
For Each quelldateipfad in args
MsgBox(quelldateipfad)
fso.MoveFile quelldateipfad, "D:\gelöscht\"
Next 


0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 13. Juli 2018 - 14:42

Zunächst mal: warum VBS? Das Pferd ist bereits mausetot. Wenn Du nicht einen zwingenden Grund hast, VBS zu nehmen, dann weiche woandershin aus.

Als nächstes kennt das FileSystemObject COM Object die Methode GetFolder(strPath), welches Dir zu strPath ein Ordnerobjekt liefert. Jenes Ordnerobjekt kennt dann die Methode Move(strDestination). Sinngemäß:

Dim fso: set fso = ...filesystemobject
Dim folder: set folder = fso.GetFolder(C:\AlterOrdner)
folder.Move "C:\NeueAblage"


Je nach Einsatzgebiet kannst Du das aber auch in JS abhandeln, und falls Du das zufällig im Windows Script Host erledigen wollen solltest, setz auf PowerShell. Der WSH ist nämlich auch fast tot.

In PS brauchst Du das filesystemobject nicht, dort kannst Du auf PS-Funktionen wie Move-Item zurückgreifen, welche Dir "alles" verschiebt (Dateien, Ordner und je nach Kontext auch anderes). Außerdem hast Du hier Zugriff auf .NET, kannst also via System.IO auf Datei- und Ordnerobjekte zugreifen und diese dann mißhandeln.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   der dom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 578
  • Beigetreten: 14. Juni 12
  • Reputation: 73
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Mein Haus, meine IT, Programmierung

geschrieben 13. Juli 2018 - 17:43

Schließe mich Ralph an - wenn du nicht auf VBS angewiesen bist, dann hol dir das Visual Studio Community und schreib dir eine kleine Console-App mit VB (das ist etwas näher dran als eine andere Hochsprache) und fertig ist der Lack.

Abgesehen davon hast du dann einen gescheiten Debugger und kannst die Probleme während des Debuggers in der IDE sehen (hoffentlich auch verstehen) und lösen.
Mit allem, was du tust, machst du offenkundig, mit welcher Einstellung du durch's Leben gehst. -- Steffen Glückselig
0

#4 Mitglied ist offline   je77 

  • Gruppe: aktive Mitglieder
  • Beiträge: 27
  • Beigetreten: 25. Januar 18
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 13. Juli 2018 - 19:27

Hallo RalphS, hallo der dom,

danke für die Antwort!

Dann werde ich mir Powershell mal auch ansehen...

Viele Grüße,
je77
0

#5 Mitglied ist offline   je77 

  • Gruppe: aktive Mitglieder
  • Beiträge: 27
  • Beigetreten: 25. Januar 18
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 13. Juli 2018 - 20:19

Hallo RalphS,

vielleicht wärst du so nett und könntest mir bei einer Frage helfen:

Welches Powershellbuch und welche Powershellversion würdest du einem Powershell-Neuling empfehlen?

Ich möchte so kleine Skripte wie oben für Windows schreiben.
(Ich habe Erfahrung mit MS VBA für Excel). Mir geht es weniger um Server- oder Netzwerkbelange, bin kein Administrator...
Ich möchte mir durch kleine Skripte das digitale Leben einfacher machen - und ich programmiere gerne (wenn auch nur hobbymäßig)...

Schönen Abend,

je77
0

#6 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 13. Juli 2018 - 20:59

Machen wir glaub ich alle. :)

Wenn Du nur Windows verwendest: Version 5.1, die aktuelle.
Wenn Du auch Linux verwendest und PS-Scripts dort verwenden willst: Version 6.0, eine plattformunabhängige Neuauflage der PowerShell. Da müßtest Du insbesondere bzgl Windowsfunktionalität ein bissel genauer hinschauen, ob PS v6 das unterstützt.


Buch müßt ich gerade passen, auch wenn es da sicherlich gute gibt. Für den Einstieg würde ich eher empfehlen, im Netz nach Tutorials zu schauen und wenn Dir das nicht genügt, weiter nach Büchern zu gucken (wobei DIE oft eher hinterher sind).

PowerShell kennt selbst

Get-Command <Name des Befehls> -Syntax

und

Get-Help <Name des Befehls>

, welche gerade für den Einstieg wertvolle Unterstützung leisten, was wie geht.



Grundlegendes:
- PS ist objektorientiert. Im Ggs zu VB gibt es daher keine typabhängigen Operatoren.
- Derzeit beste (und kostenlose) Entwicklungsumgebung für PowerShell ist die ISE, welche in v2 (bei Win7 dabei) noch unbrauchbar war und nun, in v5.x, den Namen verdient. Hier geht Intellisense, sodaß sich Scripts fast von alleine schreiben.

- PS ist standardmäßig case insensitive bezogen auf Vergleiche (kann man aber anfordern, daß das mit geprüft werden soll).

- Variablen und Funktionsnamen sind immer case-insensitive, auch dann, wenn eine .NEt-Funktion angesprochen wird, die das normalerweise nicht sind. $Variable und $VARIABLE unterscheiden sich nicht, ebenso wie <objekt>.toString() und <objekt>.TOSTRING(), *obwohl* die tatsächliche Funktion exakt .ToString() heißt.

Zuweisung:
$Variable = Wert

Operationen:
$a = 4 + 5 ( = int 9)
$a = '4' + '5' (= string '45')

Stringbegrenzer: ' ohne weitere Interpretation; " mit Auswertung des Strings zur Laufzeit

Typisierung möglich mit [typname]. Typen sind .NET-Typen. Jedes Objekt kennt .Gettype().Fullname, welches besagten Typen als String ausgibt.

Befehlsverkettung: Füttert Ausgabe eines Befehls in einen anderen.
Trennzeichen das Pipe-Zeichen ( | ).
Get-Item Datei | Remove-Item löscht "Datei".



# Einzeiliger Kommentar

<#
Mehrzeiliger
Kommentar
#>


Kontrollstrukturen:

- die üblichen Strukturen if () , for(), while () funktionieren gemäß C-Syntax. Switch(x) ist dort das, was Select Case in VB* ist. Switch(x) ist in Ps aber ein wenig anders:

Switch(x)
{
'case X' {Befehle}
'case Y' {Befehle}
{zu berechnender Case} {Befehle}
}

Die einzelnen Fälle müssen natürlich keine Strings sein. Allerdings wird nicht durchgefallen: der erste passende Case paßt und fertig analog zu c# wo allerdings ein break nach jedem Case erforderlich ist.


- PS hat außerdem seine eigenen Kontrollstrukturen:

- <Objekte> | % { Befehle } führt für jedes Objekt in der Liste Befehle aus (% ist Alias für Foreach-Object)

- $start .. $end | %{Befehle } Wenn Start und End Integerwerte sind, dann ist $start .. $end ein Intervall von $start bis $end, jeweils inklusive. Analog for i = start to end ... next . Formal wird $start..$end einfach zu einer Objektliste.

- <Objekte> | ? {Bedingung} Filtert Objekte nach Bedingung

- Ausgabe ist in PowerShell implizit. Einfach hinschreiben: $X (landet in der Pipeline zur Weiterverarbeitung. Return ist ebenfalls nicht notwendig. Alles was zurückgegeben wird, landet entweder auf der anderen Seite der Zuweisung oder auf dem Bildschirm. Filter ( ? { ... } müssen genau einen Booleschen Wert zurückgeben, welcher für ein Objekt in der Eingabeliste angibt, ob es zur Ergebnisliste gehren soll oder nicht. Ansonsten ist relativ egal, wer wann wo wie was ausgibt oder nicht ausgibt.

- Insbesondere: PS kennt keinen trinären Operator ( $Variable = Bedingung ? Wert1 : Wert2), ermöglicht aber die Zuweisung von Kontrollstrukturen, sodaß $Variable = if ($bedingung) {$wert1} else {$wert2} das tut, was man intuitiv erwarten würde.



Für alles Weitere ist die MSDN ein sehr guter Anlaufpunkt. Einfach nach site:msdn.microsoft.com <Funktionsname> googlen, wenn Get-Help <Funktionsname> nicht die Frage beantwortet. Und c#-bezogene Ergebnisse nicht aus der Suche ausschließen, da PS auf eben jene zurückgreift. Allerdings muß man die dann nochmal in PowerShell-Syntax "übersetzen" .
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#7 Mitglied ist offline   je77 

  • Gruppe: aktive Mitglieder
  • Beiträge: 27
  • Beigetreten: 25. Januar 18
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 13. Juli 2018 - 21:14

Hallo RalphS,

vielen Dank für die sehr ausführliche Antwort!!

Ich werde mich dann mal von VBScript zur Powershell bewegen und mir evtl. auch ein Buch zuzulegen - habe bei dem Händler mit dem A ein gutes gesehen.

Ich wünsche dir einen schönen Abend...

Viele Grüße,

je77
0

#8 Mitglied ist offline   je77 

  • Gruppe: aktive Mitglieder
  • Beiträge: 27
  • Beigetreten: 25. Januar 18
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. Juli 2018 - 08:32

Hallo,

eine letzte Frage habe ich noch:

Ich habe online gelesen, dass VBSedit (ich besitze VBSedit) auch ein guter Editor für Powershell sei.

Da ich Powershell lernen möchte, möchte ich nochmal fragen ob jemand Erfahrung mit VBSedit + powershell hat und dies empfehlen kann.

Stimmt das, dass VBSedit kompatibel mit Powershell ist?

Viele Grüße,
je77
0

#9 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 14. Juli 2018 - 09:51

Kann da jetzt nichts entsprechendes finden... auch auf der Homepage von VBSEdit steht nix Derartiges. :huh:

Falls Du das zufällig bei social.microsoft gefunden haben solltest, der erklärt, daß vbsedit ein VBS-Editor sein und daß "dies" ein guter PS-Editor sei => link (dort); *nicht*, daß vbsedit ein guter PS-Editor sei.

Aber wie gesagt, die PowerShell ISE ist eh schon bei Windows dabei (powershell_ise.exe oder per Startmenü unter diesem Namen); einfach starten und in Ruhe anschauen und dann vergleichen. Ich hab bisher noch keinen besseren PS-Editor gesehen, der auch kostenlos war, und die, die NICHT kostenlos waren und die inirgendeiner Form das Prädikat "besser als die ISE" zu verdienen scheinen, sind sackenteuer ($400 oder so).

Wenn ich mir VBSedit so anguck, könntest Du mit der ISE und PS ähnlich glücklich werden.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#10 Mitglied ist offline   je77 

  • Gruppe: aktive Mitglieder
  • Beiträge: 27
  • Beigetreten: 25. Januar 18
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. Juli 2018 - 19:41

Hallo,
nochmals dankeschön...
Schönen Abend.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0