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

[文本处理] 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的引号不包含空格,倒是可以正常传递。
请问,怎么让传递参数时,内容不被分割?

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

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

TOP

返回列表