找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28033|回复: 6

[文本处理] 【已解决】批处理for /f命令拆解字符串搞丢了文本中的感叹号,请教如何解决?

[复制链接]
发表于 2024-4-12 11:53:47 | 显示全部楼层 |阅读模式
本帖最后由 52hz 于 2024-4-12 13:39 编辑

请教大佬们,我用for /f循环来拆解文本,变量%%b和%%c原本是图片链接,由于开启了变量延迟,拆解后的文本丢失了!!导致链接错误。
为了测试丢失的原因,关闭了变量延迟后链接中的!!就不会丢失了,可是此for循环中还有其它地方是需要使用延迟变量的,这个不能关闭,请问有其他办法解决么?
文本内容如下:
  1. XTC3082228090        https://img.alicdn.com/imgextra/i2/3301937583/O1CN01BLj6Va25t4JSOGUtv_!!3301937583.jpg        https://img.alicdn.com/imgextra/i4/3301937583/O1CN012bQDIE25t4JR0chCt_!!3301937583.png
复制代码
代码如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=:" %%N in ('findstr/n ".*" "%~dp0明细复制在这里.txt"')do set "Total=%%N"
  4. for /f %%I in ('echo prompt $H ^| cmd') do (
  5.     set "BS=%%I%%I%%I%%I%%I"
  6. )

  7. for /f "tokens=1-3 delims=        " %%a in (%~dp01.txt) do (
  8.     set /a X+=1
  9.     set /p "= %BS%             ★ 一共【!Total!】个,正在处理第【!X!】个……"<nul
  10.     curl -s "%%b" > "%~dp0白底/%%a.jpg" -H "User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)"
  11.     curl -s "%%c" > "%~dp0透明/%%a.png" -H "User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)"       
  12.         set /p "=%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%"<nul
  13.         pause
  14. )
  15. set /p "=%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%"<nul
  16. set /p "= %BS%             图片下载完成!任意键返回主菜单!            "<nul        
  17. pause > nul
  18. exit
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-4-12 12:44:40 | 显示全部楼层
这样试
  1. for /f "tokens=1-3" %%a in (1.txt) do (
  2.      set url1=%%b
  3.      set url2=%%c
  4.      setlocal enabledelayedexpansion
  5.      echo;!url1!
  6.      echo;!url2!
  7.      endlocal
  8. )
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-4-12 13:38:59 | 显示全部楼层
回复 2# terse


    多谢大佬,明白了,去掉最顶部的全局变量延迟,只在for内需要用到的地方开启
    多谢~
发表于 2024-4-12 13:40:26 | 显示全部楼层
  1. 或者试试
  2. 去掉 setlocal enabledelayedexpansion
  3. call set /p "= %BS%             ★ 一共【%Total%】个,正在处理第【%%X%%】个……"<nul
复制代码
 楼主| 发表于 2024-4-12 15:55:10 | 显示全部楼层
回复 4# 77七


    也可以耶,学到新姿势,前边加个call就可以代替setlocal?看来我要去学一下call了,多谢大佬不吝赐教。
发表于 2024-4-12 16:22:23 | 显示全部楼层
回复 5# 52hz


这里有个call的例子:
http://bbs.bathome.net/thread-14852-1-1.html
 楼主| 发表于 2024-4-18 10:01:11 | 显示全部楼层
回复 6# Batcher


    好的,多谢老大,我学习一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:19 , Processed in 0.020882 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表