[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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-4 14:06 编辑

开了延时变量,原来如此。
智慧是,利用最简单的代码替代复杂事情的处理过程。
付款请扫头像二维码码,谢谢

TOP

如果一定要有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 获取完毕
复制代码

TOP

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

TOP

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



    忘了说了,程序中是开启了变量延迟了。。。

TOP

回复 2# lifei259


    打开了变量延迟了,我测试了还是不行!

TOP

本帖最后由 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
复制代码
测试有效

TOP

回复 7# yhcfsr


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

TOP

返回列表