2014-03-30 1 views
0

나는 Powershell로 도청하고 이전 콘솔 'for'명령을 대체하려고합니다. 예를 들어, 경로에있는 "FLAC.EXE"을 사용하여 * .WAV 파일의 폴더를 암호화하기 : 나는 플락 파일 이름 만 문자를 수신하지 않고 명확하게 결과를 얻을 그러나Powershell - 인수로 외부 프로그램에 파이핑

(Get-ChildItem)|Where-Object{$_.extension -eq ".wav"}|flac "$_.Name" 

문자열 "$ _. 이름".

이것은 확실한 확실한 문제이지만, 아직이 단계에서 계속 나아지고 있습니다.

답변

1

것은 이런 식을 시도

Get-ChildItem *.wav | Foreach-Object {flac $_.FullName} 

자동 가변 $_ 전형적 예를 들어, 파이프 라인의 일부인 스크립트 블록의 문맥 안에서만 유효 {...}.

+0

우수! 나는 단지 추신에 들어 오기 시작했다. 그러나 스크립트와 즉시 사용 사이에는 명확한 이분법이있는 것으로 보입니다. 스크립트로 입력 된 여러 단계 프로세스의 경우/forach/if/elsif와 같은 막연한 VB 컨트롤 구조를 사용합니다. 그러나 즉시 실행을 위해 프롬프트에서 작업하는 경우 이러한 구조에 적절한 'cmdlet'아날로그를 사용합니다 "Foreach-Object"와 같은 별로 직관적이지는 않지만 MS가 이러한 실행 모드를 합리화하는 것이 합리적 인 접근이라고 생각합니다. 맨 먼저 가장 유용한 'cmdlet'을 배워야한다고 생각합니다. –

+2

@ 젬먼, 나는 이분법을 보지 못합니다. 개인적으로 나는 그것이 더 자연 스럽기 때문에 내가 할 수있는 곳에 파이프 라인을 사용하려고 노력한다. 스크립트에서 Foreach-Object를 사용합니다. Foreach-Object의 본문은 여러 줄의 코드로 확산 될 수 있습니다. –

+0

콘솔이 멀티 라인 스크립팅 환경 이었으면 좋겠습니다. 그런 식으로 '변수', 'if와 for'를 자연스럽게 여러 행에 입력 한 다음 제어 반환 또는 일부 조합을 완료했을 때 실행할 수 있습니다. 비교해 보면 cmdlet 모델은 꽤 이해하기 어려운 것처럼 보입니다. 적어도 일반적인 C++ 또는 VB에 익숙한 사람에게는. 적어도 처음에는 –

관련 문제