2 Stimmen

Sollte ich dafür PowerShell oder CMD.exe verwenden?

Was sollte ich verwenden, um die unten beschriebene Aufgabe zu erfüllen?

Aufgabe:

  1. quer in jeden Unterordner eines Ordners
  2. wenn der Unterordner den Ordnernamen XXX hat, bestimmte Befehle aufzurufen

7voto

Keith Hill Punkte 183005

Wenn Sie sich für PowerShell entscheiden, was ich empfehlen würde, ist diese Aufgabe ziemlich einfach:

PS> Get-ChildItem <path> -r | Where {$_.PSIsContainer -and $_ -match '<regex>'} |
    Foreach { <do something with each DirectoryInfo object stored in $_> }

Die Kurzversion unter Verwendung von Aliasen lautet (Achtung: Diese Version löscht die angegebenen Verzeichnisse rekursiv aus dem aktuellen Verzeichnis):

PS> dir . -r | ?{$_.PSIsContainer -and $_ -match 'Backup'} | Remove-Item -v -wh

Diese Version zeigt Ihnen, welche Verzeichnisse gelöscht werden würden, ohne sie tatsächlich zu löschen. Entfernen Sie das -wh (whatif), um die Ordner tatsächlich zu löschen und Ihnen mitzuteilen, welche davon gelöscht wurden. Dies ist der "Produktions"-Aspekt von PowerShell. Sie können -WhatIf (oder -wh) bei den meisten Cmdlets verwenden, die destruktiv sind, um zu sehen, was der Befehl "tun würde", ohne den destruktiven Vorgang tatsächlich durchzuführen. Dies ist sehr praktisch, wenn Sie Prozesse basierend auf einem Platzhalter beenden möchten, z. B.:

PS> Get-Process *host | Stop-Process -WhatIf

Eine andere Möglichkeit ist die Verwendung von -Confirm. Dann werden Sie nach jedem Prozess gefragt und können ja, nein, ja zu allen, nein zu allen sagen. Vom Standpunkt der Produktion aus betrachtet, denke ich, dass PowerShell einen ziemlich klaren Vorteil gegenüber einigen der anderen hier vorgestellten Optionen hat. Ich sag's ja nur. :-)

0 Stimmen

Wow, das ist schön :) Wo lernen Sie PowerShell? Ich habe das nutzlose *.doc in einer .zip-Datei heruntergeladen und kann nichts Nützliches daraus lernen.

1 Stimmen

@Henry, ignorieren Sie die offizielle Anleitung. Es ist nutzlos. Es gibt viel bessere Anleitungen im Internet.

2 Stimmen

Henry, schauen Sie sich dieses kostenlose eBook an, das ich geschrieben habe (es ist kurz) - tinyurl.com/efposh . Schauen Sie sich auch dieses umfassende kostenlose Buch an: powershell.com/cs/blogs/ebook von Dr. Tobias Weltner. Wenn Sie sich jemals entscheiden, in die PowerShell so tief einzusteigen, dass sich der Kauf eines Buches lohnt, lesen Sie es: manning.com/payette2 . Übrigens verfolge ich die PowerShell seit der PDC 2003 und bin seit vier Jahren PowerShell-MVP.

2voto

Peter Mortensen Punkte 29848

PowerShell, wenn es zwischen diesen beiden liegt. CMD.exe ist einfach zu mühsam.

Eine Alternative sind Skriptsprachen wie Perl und Python.

0 Stimmen

In Perl, verwenden Sie das Modul File::Find, um rekursiv zu suchen, oder ein glob, um die unmittelbaren Kinder des aktuellen Verzeichnisses zu suchen.

0 Stimmen

Ich denke, es wäre einfach in Perl oder Python, aber ich möchte nicht, dass die etwas als Vorbedingung für dieses einfache Skript zu installieren. Danke.

0 Stimmen

Der zweite Gedanke ist, dass PowerShell installiert sein muss, bevor Windows auch .ps1 ausführen kann.

2voto

snicker Punkte 6020

Ich empfehle das, womit Sie diese Aufgabe am besten bewältigen können, vor allem, wenn Sie es regelmäßig tun müssen. Batch-Dateien, Powershell, VBScript, JScript, Ruby, Perl, Python, C#, was auch immer. Womit auch immer Sie es schneller erledigen können.

Mit Powershell und höherwertigen Programmen haben Sie mehr Kontrolle, aber Sie können dies auch mit dem Windows Script Host mit VBScript oder JScript tun. Vor Powershell habe ich viele einfache Aufgaben wie diese erledigt, indem ich einfache VB-Skripte geschrieben und sie mit WScript ausgeführt habe.

Ich sollte auch erwähnen, dass, wenn Sie jemals ein so einfaches Skript auf einem anderen Rechner verwenden müssen, Sie so ziemlich sicher sein können, dass WScript auf diesem Rechner vorhanden ist, wenn es sich um Windows XP oder höher handelt, während Powershell nur auf neueren Versionen von Windows verfügbar ist. Oder Sie verwenden C#... wenn Sie es beherrschen. Auf Ihrem Rechner ist wahrscheinlich der C#-Compiler installiert, ob Sie es wissen oder nicht.

Einfaches Beispiel: In meiner Musiksammlung musste ich die Attribute aller Dateien mit bildbezogenen Erweiterungen und Musikwiedergabelistenerweiterungen auf "versteckt" setzen, um zu verhindern, dass Windows Media Player diese Dateien automatisch zu meiner Bibliothek hinzufügt. Die Bibliothek würde dann mit allen Arten von Albumcovers in der Bilderbibliothek gefüllt werden. Ich habe gerade ein schnelles JScript geschrieben, das mit WScript.exe ausgeführt wird, um die Verzeichnisstruktur zu durchlaufen und diese Attribute zu setzen. Ich führe es regelmäßig aus, wenn ich neue Musik bekomme, und entweder iTunes oder WMP fügt diese Bilder automatisch dem Verzeichnis hinzu.

Links:

0 Stimmen

Thx, wo kann ich lernen, wie ich JScript zur Erfüllung meiner Aufgabe verwenden kann?

0 Stimmen

Ich habe einige Links für Sie hinzugefügt, die hilfreich sein dürften =]

0 Stimmen

1voto

inked Punkte 634

Ich habe das in VBScript schon eine Million Mal gemacht. Es braucht nur ein paar dünne rekursive Funktionen, um "es" zu erledigen. Und da es sich um VBScript handelt, gibt es eine ganze Reihe von Funktionen, die ausgeführt werden können.

1voto

user155814 Punkte 101

Wenn Sie es eilig haben, nehmen Sie die Sprache, die Sie beherrschen! Wenn Sie bereit sind, neue Dinge zu lernen und täglich mit Windows-Systemen arbeiten, sollten Sie PowerShell verwenden. PowerShell ist jetzt in allen MS-Produkten wie Exchange 2007 und SQL Server 2008 enthalten und wird mit Windows 7 mitgeliefert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X