0

파일의 왼쪽 5 문자가 이동할 하위 디렉토리의 오른쪽 5와 일치하므로 패턴을 사용하여 한 번에 8k + 파일을 모두 수행하고 싶습니다.Powershell 파일을 디렉토리에서 하위 디렉토리로 파일 이름을 기준으로 이동하십시오.

이 하나 하나 작동합니다

move-item -path X:\"Property Files"\05165*.pdf -destination X:\"Property Files"\"* -- 05165"; 
move-item -path X:\"Property Files"\05164*.pdf -destination X:\"Property Files"\"* -- 05164"; 

가 사전에 어떤 도움을 주셔서 감사합니다.

답변

0

이 이미 존재합니다

Get-ChildItem "X:\Property Files\*.PDF" | 
ForEach { move -path $_ -destination ($_.directoryname +"\* -- "+ $_.Name.substring(0,5))} 

, 당신은 단지 (substring(0,5)를) 처음 다섯 개 문자를 추출 파일 이름 만 사용하여, 그것을 사용 일치시킬 폴더의 끝으로
$_.Directoryname 대상 폴더가 원본 경로의 하위 폴더라고 가정합니다.

+0

정말 고마워요. 그것은 완벽하게 작동했습니다. 필자는 전체 디렉토리로 이동하기 전에 * 5 앞에 5 자리 숫자를 사용하여 파일을 시험해 보았습니다. 그리고 작업이 끝난 후에 별표를 다시 입력하고 Enter 키를 눌러 테스트했습니다. 내 컴퓨터에서 약 한 시간이 걸렸지 만 이전보다 훨씬 빨랐습니다. 시간 절약에 감사드립니다. :-) – user3516394

0

자, 이제 전체 RegEx 태그가 올바른 경로에 있습니다. 내가 한 일은 마지막 백 슬래시까지 모든 것을 찾은 다음 5 자리를 캡처 한 다음 줄 끝까지 백 슬래시가 아닌 캡처 된 그룹 만 반환하는 것입니다. 변수를 $ItemNumber으로 설정하고 대상에서 사용했습니다. 대상 소스 폴더의 모든 항목에 대해 ForEach 루프에서 실행했습니다. 이 같은

ForEach($File in (GCI "X:\Property Files\*.PDF")){ 
$ItemNumber = $File.Fullname -replace ".+?\\(\d{5})[^\\]*$", "`$1" 
move-item -path X:\"Property Files"\05165*.pdf -destination X:\"Property Files"\"* -- $ItemNumber" 
} 

당신이 원하는 경우에 당신은 파이프를 통해 그것을 할 수 있습니다 : 다음은 내가 함께 결국 코드의

GCI "X:\Property Files\*.PDF"|%{move-item -path X:\"Property Files"\05165*.pdf -destination X:\"Property Files"\"* -- $($_.Fullname -replace ".+?\\(\d{5})[^\\]*$", "`$1")"} 

는하지만 그 종류의 긴 나와서, 어떤 사람들은 정말하지 않습니다 한 줄의 길처럼.

해당 RegEx는 테스트 할 수 있습니다. here, 그리고 모든 문제가 해결되었습니다. 대상 폴더를 가정 (regex101.com 설명 링크) 한 라이너로

+0

감사합니다. 각 파일의 이름을 지정하지 않아도 배치 프로세스를 찾고 있었기 때문에 청구서에 정확히 맞지 않았습니다. 정규식 사이트에 대해 알아두면 좋을 것입니다. – user3516394

+0

이 파일의 이름을 바꾸지 말고 그냥 옮겨야합니다. 그러나 나는 당신에게 적합한 솔루션을 찾게되어 기쁩니다. – TheMadTechnician

관련 문제