2012-12-18 14 views
2

"파일 복사"tcl 명령에 대한 쿼리가 있습니다. 내 모든 파일을 목록에 저장하고 내 명령에 사용했습니다. 그러나 tcl은 그 파일을 인식하지 못합니다. 예를 들어tcl의 파일 복사 중

:

Files are abc.log , foo.log , bar.log 

이 파일 목록에 추가하는 경우가 list_file 말을 내가

lappend list_file abc.log foo.log bar.log 
    file mkdir ../../abc 
    file copy -- $list_file ../../abc 

나는 오류 메시지 "오류 복사를 얻고 나의 명령에 list_file을 대체 할 경우, 파일이나 디렉토리가 없습니다 ". 파일 이름을 직접 지정하여 (목록 대신) 시도하면 작동합니다. 이 부분을 안내해주세요.

답변

2

악 오토의 대답 @에 정교 ...

{*}은 Tcl의 8.5 이후에서만 사용할 수 있습니다; 이전 버전에서는 eval 또는 여러 호출을 사용할 수있었습니다.

eval 사용하여 명령 구축 :

set cmd [list file copy --] 
lappend cmd abc.log foo.log bar.log ../../abc 
eval $cmd 

을 (리스트를 사용하여 eval이 uated로 명령을 만드는 필수 인 이유 배울 this를 참조하십시오.)

다중 호출 (생각할 필요도없는 일) :

foreach fname $list_file { 
    file copy -- $fname ../../abc 
} 
+0

감사합니다! 디렉토리를 복사하는 방법? 그것은 "파일을 덮어 쓸 수 없다" –

1

file copy에 전달 된 목록을 확장해야합니다.

file copy -- {*}$list_file ../../abc