2011-01-10 6 views
1

이 스크립트를 작성하여 파일을 대상 폴더로 이동했습니다. 스크립트를 실행할 때 모든 드라이브가 아닌 현재 디렉터리에서 .zqx 파일 만 찾고 있기 때문에 여기에 뭔가 빠져있는 것처럼 보입니다. (dir $ paths ..) 부분은 .zqx 파일 목록을 즉시 반환한다는 점에 유의하십시오.항목을 이동할 때 PowerShell에서 다른 폴더의 파일을 찾는 방법?

가 Paths.txt이

C:\ 
D:\ 
E:\ 

$paths = get-content paths.txt 
mv (dir $paths -r -fi *.zqx | ?{$_.lastwritetime -lt ($sevendaysold)}) -dest e:\xqz 

답변

6

잘 같은 드라이브 문자를 가지고, 당신은으로 실행 한 가지 문제는 이동 파일 경로를 계산하는 부분은 전체 경로를 파일 이름을 생산되지 않는 것입니다. 내가 무슨 말 보려면이 시도 :

$OFS="`n" 
"$(dir $paths -r -fi *.zqx | ?{$_.lastwritetime -lt ($sevendaysold)})" 

Move-Item에 대한 경로 매개 변수는 [string[]] 그래서 PowerShell을 문자열 배열에 디렉토리 식의 결과를 변환 입력합니다. 불행히도 System.IO.FileInfo 객체는 IIRC로 생성 된 파일 이름을 기반으로 "ToString()"을 렌더링합니다.

다행히도 수정이 쉽습니다. FileInfo 객체를 Move-Item으로 파이프하십시오.

dir $paths -r *.zqx | ?{$_.lastwritetime -lt $sevenDaysOld} | mv -dest e:\xqz 
+0

IMHO 불일치 정도입니다. 명령은 매개 변수가 전달되는 방식에 대해 독립적으로 동일한 결과를 생성해야합니다. 'Select-String'과 비슷한 문제가 생겼습니다. https://connect.microsoft.com/PowerShell/feedback/details/576354/select-string-behaves-differently-on-how-inputobject-is-passed – stej

+0

Keith, the 고침은 완벽하게 작동했으며 이전의 설명은 내 진술이 효과가없는 이유에 대해 절대적인 의미를 갖게했습니다. 어떤 명령의 결과를 다른 명령으로 보내려고 할 때 변환이 어떻게 작동하는지 더 세심한주의를 기울이십시오. 감사! – Animesh

+0

@Stej, 예, 동의해야합니다. PowerShell에서이 경우 속성 이름으로 바인딩하는 파이프 라인 바인딩의 복잡함의 불행한 부분입니다. 그것이 '가치에 의해 묶인다면, 그들은 FileInfo를 수정하는 방법을 알아 내야 할 것입니다. 또는 아마도 '속성 이름으로 바인딩'*이 수정 사항이었습니다. :-) –

관련 문제