2016-03-30 6 views
-1

Ich bin neu in Powershell und ich versuche, eine Funktion zu erstellen, die eine Liste von Dateien mit Leerzeichen getrennt nehmen und eine neue Datei für jede von ihnen im aktuellen Verzeichnis erstellen kann. Führen Sie dann einen Befehl ls aus, um das Verzeichnis anzuzeigen, um zu bestätigen, dass die neuen Dateien hinzugefügt wurden. Hier ist, was ich habe, die nicht funktioniert:Powershell Emulation Linux Touch, um mehrere Dateien zu erstellen

function touch{ 
    params([String[]] $files) 
    ForEach($file in $files){ 
    New-Item $file 
    } 
ls 
} 

Dies scheint nicht zu funktionieren. Jede Hilfe wäre willkommen.

Antwort

1

Es gibt nichts genannt params(), es ist param(). Ich habe auch Out-Null hinzugefügt, weil New-Item ein FileInfo -Objekt für jede Datei zurückgibt, die es erstellt. Ohne sie würden die neuen Dateien zweimal angezeigt: einmal von New-Item und einmal von ls.

function touch{ 
    param([String[]] $files) 
    ForEach($file in $files){ 
    New-Item -Path $file | Out-Null 
    } 
ls 
} 

touch -files "test.txt", "test2.txt   

    Directory: C:\Users\frode\TouchFolder 

Mode    LastWriteTime   Length Name 
----    -------------   ------ ---- 
-a----  30.03.2016  20:56    0 test.txt 
-a----  30.03.2016  20:56    0 test2.txt  

Beachten Sie, dass Sie bei einem Fehler erhalten, wenn die Datei vorhanden ist oder wenn Sie den Pfad so test\test3.txt verwenden, wenn der Unterordner test fehlt. Sie können das Überschreiben und die Erstellung von Unterordnern mit New-Item -Path $file -Force erzwingen.

Argumente zu verwenden, versuchen:

function touch{ 
    ForEach($file in $args){ 
     New-Item -Path $file | Out-Null 
    } 

    Get-ChildItem 
} 

touch index.html users.html "test 3.txt" 

    Directory: C:\Users\frode\TouchFolder 


Mode    LastWriteTime   Length Name 
----    -------------   ------ ---- 
-a----  30.03.2016  21:19    0 index.html 
-a----  30.03.2016  21:19    0 test 3.txt 
-a----  30.03.2016  21:19    0 users.html 
+0

Soll ich 'args' anstelle von' param() 'verwenden? Ich versuche, dies ohne Kommas, Anführungszeichen oder eine "Datei" aufzurufen. In etwa so: 'touch index.html users.html' –

+0

Ja, siehe aktualisierte Antwort. Ich würde jedoch empfehlen, Parameter zu verwenden und durch Kommas getrennt zu sein (so definieren wir ein Array in PowerShell), wie es in PowerShell gemacht wird. Du solltest die Sprache lernen und nicht versuchen, etwas anderes nachzuahmen. –

-1

Wie ursprünglich gesagt, ich so den Linux touch Befehl emulieren wollte, dass ich einfach geben könnte:

touch file.txt file2.txt

Hier ist, was ich beenden mit:

function touch(){ 
    foreach($file in $args){ 
    New-Item -Path $file | Out-Null 
    } 
    ls 
} 

Die ls Befehl ist alles, was hinzugefügt wurde, geht über den Linux-Befehl touch.

+0

'ls' ist ein Alias ​​für' Get-ChildItem', also ist es viel besser, 'Get-ChildItem' in deinen Skripten zu verwenden, wie in Frodes Beispiel zu sehen. – Bluecakes

Verwandte Themen