批处理问题 怎样把读取内容的变量值赋值给一个变量 例子如下

set datenum=0
for /f "tokens=*" %%i in (.\logDate.txt) do (
set /a datenum+=1
if !datenum! equ 2 (
set ipath = %%i
echo %%i =====此处有值
echo!ipath! =====此处无值 )

)

求高手解答
补充整段代码: 我已经开启延迟了
@echo off
setlocal enabledelayedexpansion
set datenum=0
set ipath=
for /f "tokens=*" %%i in (.\logDate.txt) do (
set /a datenum+=1
if !datenum! equ 2 (
set ipath = %%i
echo %%i =====此处有值
echo!ipath! =====此处无值 )

)

求高手解答

@echo off
setlocal enabledelayedexpansion
set "datenum=0"
set "ipath="
for /f "tokens=*" %%i in (.\logDate.txt) do (
set /a datenum+=1
if !datenum! equ 2 (
set "ipath=%%i"
rem 给变量赋值的时候最好用引号把变量括起来,因为bat对空格异常敏感
echo.%%i
echo.!ipath!
)
)
pause追问

楼上回答的很好,那我再问一下 为什么 有的时候不用 引号 没事 ,像赋予变量文本内容(除了数字) 就必须如你说的那样才能显示出来啊

追答

没事的时候是因为你在给变量赋值的时候,变量前后都没有多余的空格...出了问题则反之...
所以初始化变量以及给变量赋值最好是用引号括起来...
即:set "str="
set "str=Message"
echo.%str%
下面是错误的例子:
@echo off
set str ="Hello world"
rem str 变量后面多了一个空格,其实变量不是你预想的"str",而是"str "
echo.%str%
rem 很显然,这个结果就不是你期望的了
rem echo.%str %
rem 把注释去掉才是你想要的结果
pause

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-21
1.最后一行的“echo!ipath! ”里 echo和显示内容最好打一个空格,不推荐在echo直接后接 . 或 = 或 \等来代替空格。

2.文件里的文本内容有问题,含有特殊字符如 | & !。如内容为 美眉!美眉我爱你! 时,由于你打开变量延迟,所以 !美眉我爱你! 会以变量处理,事实没有这个变量,所以赋空,显示时只剩下 美眉 了。其他特殊字符同理
第2个回答  2017-07-31
@echo off
setlocal enabledelayedexpansion
set "datenum=0"
set "ipath="
for /f "tokens=*" %%i in (.\logDate.txt) do (
set /a datenum+=1
if !datenum! equ 2 (
set "ipath=%%i"
rem 给变量赋值的时候最好用引号把变量括起来,因为bat对空格异常敏感
echo.%%i
echo.!ipath!
)
)
pause
相似回答