2012-12-19 4 views
1

폴더 구조를 병합하고 각 상위 디렉토리 이름을 filename에 포함시키는 방법을 원합니다. 나는이 시도했지만 오류 얻을했습니다파일 이름에 폴더 이름을 포함한 파일 병합

Missing ')' in method call 

내가 아주

(ls -r -include *.ext) | % { mv -literal $_\3 $_\3.Name.Insert(0, [String]::Format("{0} - ", $_\3.Directory.Name))} 

답변

4

이 시도

ls . -r *.ext -name -file | mi -dest {$_ -replace '\\','_'} -whatif 

실제로 이동을 수행 할 수 -whatif를 제거합니다.

+0

은 매력처럼 작동합니다. 감사! – Nico

+0

경로에 대괄호 []가 있으면 실패합니다. LiteralPath를 사용해야합니다. 당신은 그것을 업데이트 할 수 있습니까? –

1

은 폴더 구조를 평평로 이름이 바뀐 모든 파일을 이동 하시겠습니까 문제가 무엇을 볼 수 없습니다를 루트 디렉토리? 예를 들어 :

ls . -r *.ext -name | ?{!$_.PSIsContainer} | mi -dest {$_ -replace '\\','_'} -whatif 

또는 V3의 경우 :

$rootPath = 'C:\TempPath' 
(ls $rootPath -r -include *.ext) | %{ 
    [string]$newFilename = $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name)) 
    #write-host $newFilename 
    mv -literal $_ "$rootPath$newFilename" 
} 
+0

예. 모든 하위 폴더에있는 특정 확장명을 가진 모든 파일을 루트로 이동하고 루트에 대한 폴더 구조를 포함하여 파일 이름을 파일 이름으로 변경하고 싶습니다. 스크립트가 다음 오류를 발생시킵니다. null 값을 갖는 식에서는 메서드를 호출 할 수 없습니다. C : \ remove.ps1 : 3 char : 42 + [문자열] $ newFilename = $ _. Name.Insert (<<<< 0, [문자열] :: 형식 ("{0} .Directory.Name)) Move-Item : 'LiteralPath'매개 변수가 null이므로 바인딩 할 수 없습니다. C : \ remove.ps1 : 5 char : 16 + mv -literal <<<< $ _ "$ rootPath $ newFilename" – Nico

관련 문제