Board logo

标题: [其他] 批处理set命令赋值时包含&号怎么办? [打印本页]

作者: a904055262    时间: 2010-4-1 19:27     标题: 批处理set命令赋值时包含&号怎么办?

一个程序调用 这个批处理文件..并传递给它一个网址.例如
http://www.bathome.net/post.php? ... &extra=page%3D1
然后批处理文件中的代码是这样的:
  1. set "url=%~1"
  2. for /f "tokens=1,2 delims=/" %%a in ("%url%") do set "url=%%a//%%b"
复制代码
目的的.提取网址中的 http://www.bathome.net这部分,并且将其附给变量 url
但是 当网址中有特殊符号.比如 & 时,会出错,
请问如何修改此代码..来兼容这种情况..谢谢

条件:
不要使用变量延时.
可以用 %url% 引用到结果.

[ 本帖最后由 a904055262 于 2010-4-2 18:19 编辑 ]
作者: yangfengoo    时间: 2010-4-1 19:53

  1. set a=b^^^&b
复制代码

作者: bat007    时间: 2010-4-1 20:33

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "a=c&b"
  4. echo !a!
复制代码

作者: vsbat    时间: 2010-4-1 22:49

  1. set "a=c^&b"
  2. echo %a%
复制代码


用 ^ 号转义--

[ 本帖最后由 vsbat 于 2010-4-1 22:50 编辑 ]
作者: a904055262    时间: 2010-4-2 00:08

可能是我没说清楚...
set "a=c&b" 中的c&b是从别处传过来的参数,无法更改其本身的.
3楼的方法可用,但是启用的变量延时..这个变量,我会用到有包含 ! 号的文本的处理,而开启了变量延时, ! 就全部会被抛掉了,不行..

还有别的方法没..

真是麻烦大家. 谢谢你们
作者: Batcher    时间: 2010-4-2 02:04     标题: 回复 5楼 的帖子

不是没说清楚,而是根本没提到这些背景。
把你完整的代码贴出来看看吧。
作者: a904055262    时间: 2010-4-2 10:35

更新提问在顶楼,,不知道这下说清楚了没有..

[ 本帖最后由 a904055262 于 2010-4-2 18:21 编辑 ]
作者: bat007    时间: 2010-4-2 22:10

为什么“不要使用变量延时”?
作者: jemuillot    时间: 2012-9-29 23:34

本帖最后由 jemuillot 于 2012-9-29 23:49 编辑

楼主的意思很明确,为什么大家装糊涂呢??

就是参数进来的时候带了“&”号怎么?

转义符号"^"在这种情况下根本不管用的……

我最近在整理GBA的ROM,遇到各种奇怪文件名的,想统一转成固定格式,写了如下脚本:
  1. @echo off
  2. cd /d %~dp0
  3. set iroot=%cd%
  4. set path="F:\Program Files\7-Zip";%path%
  5. for /f "delims=" %%i in ('dir /b *.zip') do (
  6. call :handle "%%i"
  7. )
  8. pause
  9. exit
  10. :handle
  11. set input=%1
  12. echo a=%input%
  13. set "input=%input:~1,-1%"
  14. echo b="%input%"
  15. cd %iroot%
  16. rd /s /q uz
  17. 7z x -y "%input%" -o"uz"
  18. set gid=%input:~0,4%
  19. set "gname=%input:~7,-4%"
  20. echo gid=%gid%
  21. echo gn="%gname%"
  22. cd %iroot%\uz
  23. if exist *.gba goto handle_depth
  24. for /f "delims=" %%i in ('dir /b') do (
  25. cd "%%i"
  26. )
  27. :handle_depth
  28. for /f "delims=" %%i in ('dir /b *.gba') do (
  29.   copy "%%i" "%iroot%/../%gid%. %gname%.gba"
  30. )
  31. if not exist *.jpg goto handle_next
  32. for /f "delims=" %%i in ('dir /b *.jpg') do (
  33.   copy "%%i" "%iroot%/../%gid%. %gname%.jpg"
  34. )
  35. :handle_next
  36. goto :eof
复制代码
可以把X目录下,所有的 #### - $$$$$.zip 里头的*.gba和*.jpg
解压出来放置到 X\..\ ####. $$$$$$.gba 和 X\..\ ####. $$$$$$.jpg

不管$$$$$$包含 ! 还是 & 都可以。

GBA大集合就是下载了VeryCD的




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