2016-11-26 3 views
0

2 개의 정규 표현식을 인수로 사용하고 폴더의 파일 이름을 바꾸는 간단한 Powershell 스크립트를 작성하고 싶습니다. 여기 myscript.ps1입니다 :Powershell arguments를 정규식으로 사용하여 파일의 이름을 바꾸는 방법?

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] 

내가 cmd를에서 myscript foo bar를 실행하면 내가 myscript.cmd 파일

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

에서이 스크립트를 호출하고, 내가 출력을 얻을

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

하지만 내 테스트 내가 만든 파일 foo의 이름이 변경되지 않았습니다.

내 질문 :

  • 내가 제대로 PowerShell 스크립트를 호출하고 올바른 방법으로 인수를 전달합니까? 나는 % 1, % 2 인수에 대해 따옴표를 사용해야한다고 생각합니다.
  • -replace이 작동하는 것처럼 보이지만 왜 파일의 이름이 변경되지 않습니까?
+1

문제 해결 조언 : 'echo $ PWD' –

답변

0

을 수행 할 수 있습니다 당신의 정규식이 ^foo$과 같아야하고 확장자 파일 이름과 일치 할 경우이 스크립트는 $를 주조하여 이름 바꾸기를 수행 ^foo\.txt$

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

의 foo에라는 이름의 파일을 가져 인수 [0] 정규식이 호출 할 때 길 :

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

내가 왜 몰라,하지만 당신은 그것을 내가 당신의 생각에 문제가, 당신이 파일을 필터링하지 않고 정규식이 너무 와일드 카드에 맞지 않는 참조

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

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

그러나 이것은 foobar의 이름을 바꿉니다. – LotPings