Board logo

标题: [文本处理] call传递的参数中带有引号和空格,导致传递后被分割 [打印本页]

作者: 踏沙行    时间: 2018-8-30 05:22     标题: call传递的参数中带有引号和空格,导致传递后被分割

本帖最后由 踏沙行 于 2018-8-30 05:31 编辑

已知:J:\1.txt内容为:
  1. "Key k" : "T1=abc def gh"
  2. "Value v":  "T2=IJK lmn OP"
  3.   " se sf" : " T3= FLK   LK  sEL"
  4.   "  S4 s " : FEEL DEEP File txt
复制代码
使用call代码如下:
  1. @echo off
  2. for /f  "tokens=1,2 delims=:" %%a in (J:\1.txt) do call :lp "%%a";"%%b" c
  3. pause&exit
  4. :lp
  5. echo,%1;%2
  6. goto:eof
复制代码
结果,%1,%2会自动将传过来的参数按引号和空格为标记分割,即使参数用引号包括
结果为:
  1. ""Key;k" "
  2. " "Value;v""
  3. "  ";se
  4. "  ";S4
复制代码
如果%%a和%%b的引号不包含空格,倒是可以正常传递。
请问,怎么让传递参数时,内容不被分割?
作者: cfwyy77_bat    时间: 2018-8-30 08:48

我感觉 这个参数传的有点矛盾了,原文本有引号的,%%a 套一层引号,比如第一个相当于""Key k"" ,原来的引号就废了,空格隔开了,两边的引号成对了只引了个空 。
而原文本没有引号的,而有空分隔的,想做为一个整体,势必就要用引号包含。
所以先把你的原文本FEEL DEEP File txt  用引号先包含,再%%a,%%b  去掉引号?

或者还有种耍赖的方法,不用改原文,%%a,%%b 去掉引号,再把 lp 的echo,%1,%2改成 echo %*  管你分成几个参数传- -




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