2017-04-12 8 views
3

Ich habe versucht, einige Dateien mit dem Powershell-Skript unterPowershell Rohr in string

powershell.exe "& { Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '.txt','.csv' } }" 

umbenennen Aber die $_.name scheint analysiert zu werden, wenn die "& command" ausgeführt wird, so klagt er, dass es nicht .name weiß (mit die $_ bereits entfernt). Die Ausführung ohne den äußeren String behebt das Problem, ist aber aus anderen Gründen in meinem Fall nicht möglich.

Wie aus dem zu entkommen?

+0

Sind Sie dies von Powershell ausgeführt wird? Wenn dies der Fall ist, brauchen Sie den 'Powershell '& {...}" '-Wrapper nicht. Führen Sie den Befehl direkt aus. Andernfalls sollte das '$ _' nicht erweitert werden. –

+0

Verwenden Sie einfache Anführungszeichen für die äußere Zeichenfolge und doppelte Anführungszeichen innerhalb? –

+2

Wie führen Sie diesen Befehl aus? Mit PSv5 funktioniert es wie erwartet, wenn ich es von CMD ausführe ... –

Antwort

2

Das funktioniert völlig in Ordnung:

powershell.exe "& { Get-ChildItem *.txt | Rename-Item -NewName { `$_.name -Replace '.txt','.csv' } }" 
+0

Für mich diese Fehler mit "Rename-Item: Die Eingabe in den Skriptblock für den Parameter 'NewName' fehlgeschlagen. Der Begriff '$ _. Name' wird nicht als Name eines Cmdlet" –

+0

erkannt, die jetzt mit Baktik entkommen ist. .. –

+0

Wenn Sie screenshot wollen, kann ich es posten –

-1
powershell.exe "& { 
    Get-ChildItem -Filter *.txt | ForEach-Object {`$_.Name} 
}" 

Backticks entkommen Sonderzeichen in Powershell-Strings

` 
+0

Sie haben den Befehl 'Rename-Item' ausgeschlossen, der ein wichtiger Teil des OP-Codes ist. –

+0

@JamesC. Ich habe mich entschieden, einen Code zu schreiben, der _schadensfrei _ ist, damit der Nicht-Initiierte ausgeführt wird. – gvee

0

Ich kann nichts falsch mit Ihrem ursprünglichen Befehl sehen, aber ich persönlich würde verwenden die Path.ChangeExtension Methode anstelle von -replace:

powershell.exe -command "& {Get-ChildItem *.txt | Rename-Item -NewName { [io.path]::ChangeExtension($_.name, 'csv') }}" 

Oder wie Sie scheinen Powershell über die Befehlszeile zu rufen, können Sie nur verwenden, um die ‚umbenennen‘ Befehl statt (und Powershell nicht verwenden):

ren *.txt *.csv