为什么文件名打印不正确

Why the filename is not getting printed correctly

我正在尝试使用以下代码打印文件名及其完整路径。根据代码实现,我找到字符串每个字符的 ASCII 值并检查其 ASCII 值是否为 '\'(反斜杠)字符 - 然后相应地打印:

set f "C:\tools\tcl\bin\my.log"
for {set i 0} {$i < [string length $f]} {incr i} {
   set c [scan [string index $f $i] %c]
   if { $c == 9 } {
       puts -nonewline "\"
   } else {
      puts -nonewline [string index $f $i]
   }
}

但我的输出低于:

C:\ools\cinmy.log 

请告诉我如何解决这个问题?

我的问题据说与 重复,但实际上不是。在那个问题中,它在双引号内打印为字符串,但在这里我逐字符打印它

原因是你转义了反斜杠后面的字符(\) (backslash substitution)。 您应该使用双反斜杠 (\) 或大括号来定义文件。

综上所述,您需要将文件定义为:

set f "C:\tools\tcl\bin\my.log"

set f {C:\tools\tcl\bin\my.log}