问题
I want to copy all files from one folder using tcl. This is the code that I have written so far, but it does not work. What is the problem?
set files [glob -dir E:\Music *]
puts "Moving files"
foreach f { $files } {
file copy $f E:\
}
回答1:
My earlier assumption was wrong, and I unfortunately didn't notice that you were using braces around $files
. Unlike languages like C, where parentheses or braces are part of syntactic constructions, braces are used for quoting in Tcl. In this case, $files
is the list of files found by glob
, while { $files }
is the literal string " $files ". Since there is no file named " $files ", you get an error when you try to copy it.
You are still going to have problems with the backslash character. During the phase when the interpreter prepares a command for evaluation, any backslash character is read as a part of an "escape sequence". Changing the backslash character to a regular slash (E:\
-> E:/
) may solve your problem. You can also quote it like this E:\\
or like this {E:/}
. In the latter case, the braces must enclose the whole string, so it would be {E:\Music}
.
(Note: the 'Hoodiecrow' mentioned in the comments is me, I used that nick earlier.)
来源:https://stackoverflow.com/questions/28515131/copying-multiple-files-in-tcl-using-glob