0

我有一个 for 循环,它应该打印文本文件的每一行。相反,它正在打印logPath.
这是代码:

  set enabledelayedexpansion

  for %%G in (C:\ExecutionSDKTest_10.2.2\*.properties) DO (
      Set fileName=%%~nxG
       ...
     set logPath="C:/ExecutionSDKTest_10.2.2/Logs/!fileName!.log"
       ...         
        For /f "tokens=*" %%B in (!logPath!) Do (
      echo Inside the for loop for printing each line!!
      set logLine=%%B
      print !logLine!  REM this prints the logPath instead of each logLine and jumps out of this for loop after the 1st iteration!
     )
 )

有什么帮助吗?

4

3 回答 3

0

您没有告诉我们哪一行发出“invalid switch”错误消息,但我看到了几个潜在的问题:

  1. 要使用!variables!,您需要启用延迟扩展

    SetLocal EnableDelayedExpansion
    
  2. 不要'/'在文件名中使用,更改为'\'

    set logPath="C:\ExecutionSDKTest_10.2.2\Logs\!fileName!.log"
    
  3. print命令将文本文件发送到打印机。将其更改为echo

    echo !logLine!
    
于 2012-07-07T09:00:56.967 回答
0

使用反斜杠而不是正斜杠。

set "logPath=C:\ExecutionSDKTest_10.2.2\Logs\!fileName!.log"

虽然通常您可以在 Windows 中互换使用它们,但这cmd是一种特殊情况,因为正斜杠用于内置命令的开关和选项。并且它的解析器经常被正斜杠绊倒。不过,您通常可以安全地将此类路径传递给外部命令。

于 2012-07-07T09:05:07.823 回答
0
echo off
For %%G in (C:\ExecutionSDKTest_10.2.2\*.properties) DO (      
      FOR /F "tokens=*" %%i in (%%G) do @echo %%i 
 )
于 2012-07-06T21:30:25.293 回答