无忧启动论坛

标题: for怎么取文本中分隔符前的空值呢 [打印本页]

作者: 1G空间100元    时间: 前天 12:31
标题: for怎么取文本中分隔符前的空值呢
本帖最后由 1G空间100元 于 2024-12-3 13:55 编辑

比如文件seo.txt内容为(|的前后没空格):
||baidu.com|so.com|
脚本为:
for /f "usebackq tokens=1-4 delims=|" %%a in ("seo.txt") do (
    set "seo1=%%a"
    set "seo2=%%b"
    set "seo3=%%c"
    set "seo4=%%d"
)
    echo seo1=%seo1%
    echo seo2=%seo2%
    echo seo3=%seo3%
    echo seo4=%seo4%
第一个分隔符|前是空值但是没被赋值,直接过滤掉了,想达到的效果:
需要seo1取第一个分隔符前的值(包含空值),seo2取第2个分隔符前的值(包含空值),seo3取第3个分隔符前的值(包含空值),seo4取第4个分隔符前的值(包含空值)
按照上面给出的seo.txt内容,就是:
seo1的值为空,seo2的值为空,seo3的值为baidu.com,seo4的值为so.com
是需要for读取txt文本有空值时赋予变量为空值,不是直接在脚本里指定变量为空
应该怎么修改脚本呢?





作者: dayeye    时间: 前天 12:36
“”
作者: hua_wuxin    时间: 前天 13:38
本帖最后由 hua_wuxin 于 2024-12-3 13:40 编辑

备用保底方案:

for /f "usebackq tokens=1-4 delims=|" %%a in ("seo.txt") do (
  if defined %%d (
    set "seo1=%%a"
    set "seo2=%%b"
    set "seo3=%%c"
    set "seo4=%%d"
  ) else (
    set "seo1="
    set "seo2="
    set "seo3=%%a"
    set "seo4=%%b"
  )
)

作者: 1G空间100元    时间: 前天 13:48
本帖最后由 1G空间100元 于 2024-12-3 13:56 编辑
hua_wuxin 发表于 2024-12-3 13:38
备用保底方案:

for /f "usebackq tokens=1-4 delims=|" %%a in ("seo.txt") do (

正常情况下每个分隔符前都是有值的,但是有时候可能是空的,需要将空值也赋予变量:
比如seo.txt的内容可能是:
google.cn||baidu.com|so.com|
也可能是
google.cn|bing.com|baidu.com|so.com|
也有可能是
google.cn|bing.com||so.com|

|bing.com|baidu.com|so.com|
就是想将4个变量 在有空值的时候也自动赋予变量为空值,而不是过滤掉
作者: hua_wuxin    时间: 前天 13:55
1G空间100元 发表于 2024-12-3 13:48
正常情况下每个分隔符前都是有值的,但是有时候可能是空的,需要将空值也赋予变量:
比如seo.txt的内容 ...

不改变seo.txt内容的前提下好像是不好办了
等等看有没有其他坛友有办法吧
作者: slore    时间: 前天 14:56
本帖最后由 slore 于 2024-12-3 14:58 编辑
  1. @echo off
  2. for /f "delims=" %%a in (seo.txt) do call :UPDATE_LINE "%%a"
  3. pause && goto :EOF

  4. :UPDATE_LINE
  5. set "line=#%~1#"
  6. set "line=%line:|=#%"
  7. set "line=%line:##=#-#%"
  8. for /f "tokens=1-4 delims=#" %%a in ("%line%") do (
  9.     echo a=[%%a],        b=[%%b],        c=[%%c],        d=[%%d]
  10. )
  11. goto :EOF
复制代码

作者: slore    时间: 前天 18:34
slore 发表于 2024-12-3 14:56

连续空白的话,多加一行替换就行。

:UPDATE_LINE
set "line=#%~1#"
set "line=%line:|=#%"
set "line=%line:###=#-#-#%"
set "line=%line:##=#-#%"
作者: kukuyu    时间: 前天 20:09
学习 谢谢
作者: wn168cn@163.com    时间: 前天 20:17
学习了 感谢分享
作者: 2012fengxi    时间: 昨天 07:25
感谢分享
作者: guong    时间: 昨天 11:11
来学习下




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3