dos批处理语句: for /f do 的用法哪个是正确的?或者斗不对?为什么?

dos批处理语句:
for /f do 的用法哪个是正确的?或者斗不对?为什么?Usage1:
for /f "tokens=1,2,3 delims=/-" do (commond 1 commond2 commond3)

usage2:
for /f "tokens=1,2,3 delims=/-" do (commond
1
commond2
commond3
)
主要问题在于do 后有多条语句。以上两种用法对不对?

都不对。do里面的写法是第2种对,但你缺了循环变量啊!
for /f "tokens=1,2,3 delims=/-" %%i do (commond1
commond2
commond3
……
)

第1种写法应该是:
for /f "tokens=1,2,3 delims=/-" %%i do commond1&&commond2&&commond3
但如果语句太多或太长,建议采用多行书写。追问

Do后面的命令加()可以吗?
for /f "tokens=1,2,3 delims=/-" %%i do (commond1&&commond2&&commond3)

Dos命令下,尤其是在for %i in (set) do 中,()里的单引号,双引号用法可以等同对待不?

追答

  Do后面的命令如果是单行,则可以省略(),如果是多行不能省略——其他语句类似,if语句后面的()是否可省也是看是单行还是多行。

  在【for /f ["usebackq"] %%i in (set) do command】命令中,单引号、双引号、重音符,以及三者都不加的含义如下:

A、不使用"usebackq":
0.什么都不加:这是一个文件
  示例:for /f %%i in (C:\123.txt) do echo %%i
  执行结果:输出文件"C:\123.txt"中的内容
1、单引号表示这是一条命令
  示例:for /f %%i in ('C:\123.txt') do echo %%i
  执行结果:打开文件“C:\123.txt”
2、重音符没有特殊含义
  示例:for /f %%i in (`C:\123.txt`) do echo %%i
  执行结果:由于这里,重音符没有特殊含义,所以语法上与与“什么都不加”含义一样,但多了这2个字符,就不是一个合法的路径了,因此会提示找不到文件。
3、双引号表示这是一个字符串
  示例:for /f %%i in ("C:\123.txt") do echo %%i
  执行结果:输出字符串“C:\123.txt”

B、不使用"usebackq":
0.什么都不加:语法错误
  示例:for /f "usebackq" %%i in (C:\123.txt) do echo %%i
  执行结果:语法错误,要使用"usebackq"就必须至少使用这三种符号之一
1、单引号表示这是一个字符串
  示例:for /f "usebackq" %%i in ('C:\123.txt') do echo %%i
  执行结果:输出字符串“C:\123.txt”
2、重音符表示这是一条命令
  示例:for /f "usebackq" %%i in (`C:\123.txt`) do echo %%i
  执行结果:打开文件“C:\123.txt”
3、双引号表示这是一个文件
  示例:for /f "usebackq" %%i in ("C:\123.txt") do echo %%i
  执行结果:输出文件"C:\123.txt"中的内容

排版好像有点问题,B组示例中的for /f和"usebakq"之间有1个空格。

追问

感谢!

温馨提示:答案为网友推荐,仅供参考
相似回答