簡體   English   中英

如何使用Powershell參數作為正則表達式來重命名文件?

[英]How to use Powershell arguments as regex to rename files?

我想編寫一個簡單的Powershell腳本,該腳本以2個正則表達式作為參數,並重命名文件夾中的文件。 這是myscript.ps1:

echo $args[0]
echo $args[1]
Get-ChildItem
Get-ChildItem | Rename-Item -NewName {$_.Name -replace $args[0], $args[1]}
"foo" -replace $args[0], $args[1]

我正在從myscript.cmd調用此腳本

@echo off
powershell -Command %~dpn0.ps1 %1 %2

當我從cmd執行myscript foo bar時,我得到輸出

foo
bar
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        26.11.2016     15:24         16 foo
bar

但是我創建的測試文件foo沒有重命名。

我的問題:

  • 我是否正確調用Powershell腳本並以正確的方式傳遞參數? 我認為我需要在%1,%2參數周圍加上一些引號。
  • 為什么文件沒有被重命名,盡管-replace似乎可以正常工作?

我認為您的想法有問題,您不過濾文件且RegEx不適用於通配符,因此要獲取名為foo的文件,您的RegEx應該看起來像^foo$並且如果要與擴展名是^foo\\.txt$

$From = [RegEx]($Args[0])
$To =  [RegEx]($Args[1])
Get-ChildItem -file|
  %{if ($_.Name -match $From) {
    Rename-Item $_.Fullname -NewName $To
  } 
}

該腳本通過以下方式進行重命名:將$ Args [0]強制轉換為RegEx:

 .\Rename-RegEx.ps1 "^foo$" bar

我不知道為什么,但是你可以做到

$arg0=$args[0]
$arg1=$args[1]

Get-ChildItem | Rename-Item -NewName {$_.Name -replace $arg0, $arg1}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM