저는 초보자이며 TCL의 파일 이름 목록에서 가져온 일부 파일에 .skip 확장자를 추가하려고합니다. fileName.skip이있는 파일이 이미있는 경우 오류를 catch하고 화면에 내 메시지를 넣고 다음 파일을 계속 진행하고 싶습니다.파일 이름이 tcl 인 경우 파일 이름 바꾸기 및 캐칭 오류가 발생했습니다.
set i 0
foreach fileName [glob -nocomplain -type f [file join $basedir *.wav]] {
foreach line $fileData {
if { [regexp $line $fileName] == 1 } {
if { [catch {file rename $fileName "$fileName.skip"}] } {
puts "Error skipping $fileName skipped file already exists"
continue
} else {
puts "Skipping $fileName..."
file rename [file join $basedir $fileName] [file join $basedir "$fileName.skip"]
incr i
}
}
}
}
이 난에 테스트하고있어 내 폴더에있는 세 개의 파일이 있습니다 : 여기에 내가 사용하고있는 코드는
test21.wav
test21.wav.skip
test22.wav
이 코드는 이름을 변경 시점에 실행 (또는 이름을 변경하지 않습니다) 파일,하지만 그것은 화면이 출력 :
Error skipping C:/xxx/test21.wav file already exists
Skipping C:/xxx/test22.wav...
error renaming "C:/xxx/test22.wav": no such file or directory
while executing
"file rename $fileName "$fileName.skip""
내가 스크립트가 작동하기 때문에이 오류에 대해 무엇인지 알아낼 수 없습니다. catch
을 잘못 사용하고 있습니까? 아니면 다른 것일 수도 있습니다 ....
미리 도움을 청하십시오!
죄송합니다. 나는 여전히 여기에 뭔가가 빠져 있다고 생각합니다 ... 'catch'명령이 실제로 내 명령을 실행합니까? 명령을 실행하지 않고 오류를 잡을 수있는 더 좋은 방법이 있습니까? 명령이 실행될 때만 카운터를 증가시킬 수 있습니까? – KaleidoEscape
커맨드가 * ** 성공적으로 ** 실행 된 경우에만 * 카운터를 증가 시켰습니까? 당신은 이미 그것을 가지고 있습니다. else 블록에서 두 번째'파일 이름 변경 '을 제거하십시오. –
알겠습니다. 도와 줘서 고마워! – KaleidoEscape