Board logo

标题: [文本处理] [已解决]文本文件中含有!和%特殊字符,如何正确读出并赋值给变量 [打印本页]

作者: shootman2    时间: 2017-12-2 00:26     标题: [已解决]文本文件中含有!和%特殊字符,如何正确读出并赋值给变量

本帖最后由 shootman2 于 2017-12-4 00:25 编辑

我的配置文件conf.txt中的内容为

#服务器信息
sftp.host=192.168.101.100
sftp.port=22
sftp.user=sjjh_qyw
sftp.passwd=gsxt!2017
ssh.host=192.168.101.101
ssh.port=22
ssh.user=gbase
ssh.passwd=gbase%122

读取配置文件的bat脚本为

echo 正在获取服务器信息...
for /f "usebackq eol=# delims=" %%x in ("conf.txt") do set %%x
echo 获取完毕

读取完毕后,打印sftp.passwd变量时,显示结果为gsxt2017,中间的!丢失了,
如果要正确赋值,该如何处理?求助大神出手相助!
作者: lifei259    时间: 2017-12-2 10:30

本帖最后由 lifei259 于 2017-12-4 14:06 编辑

开了延时变量,原来如此。
作者: 0000    时间: 2017-12-2 12:20

如果一定要有setlocal enabledelayedexpansion的话
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::find /v /c "" <conf.txt >_&set /p n=<_&del _ 2>nul
  4. set n=10
  5. (
  6. for /l %%n in (1,1,!n!) do (
  7.   set line=
  8.   set /p line=
  9.   if defined line if not "!line:~,1!"=="#" set !line!
  10. )) <"conf.txt"
  11. echo 获取完毕
复制代码

作者: yhcfsr    时间: 2017-12-2 23:29

用你的代码,WIN10 测试
  1. @echo off
  2. echo 正在获取服务器信息...
  3. for /f "usebackq eol=# delims=" %%x in ("conf.txt") do echo %%x
  4. echo 获取完毕
  5. pause
复制代码
测试结果
作者: shootman2    时间: 2017-12-3 00:16

用你的代码,WIN10 测试测试结果
yhcfsr 发表于 2017-12-2 23:29



    忘了说了,程序中是开启了变量延迟了。。。
作者: shootman2    时间: 2017-12-3 00:18

回复 2# lifei259


    打开了变量延迟了,我测试了还是不行!
作者: yhcfsr    时间: 2017-12-3 01:08

本帖最后由 yhcfsr 于 2017-12-4 13:35 编辑

回复 5# shootman2
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 正在获取服务器信息...
  3. for /f "usebackq eol=# delims=" %%x in ("conf.txt") do (
  4. endlocal
  5. set "pr=%%x"
  6. setlocal enabledelayedexpansion
  7. echo !pr!
  8. )
  9. echo 获取完毕
  10. pause
复制代码
测试有效
作者: shootman2    时间: 2017-12-4 00:24

回复 7# yhcfsr


    感谢大神,成功解决!!!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2