[英]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
沒有重命名。
我的問題:
-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.