![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 23:03 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 菜鸟看,带空格问题请看这里! |
| 可打印版本 914 / 4 |
| 第1楼 15935643331 | 发表于 2008-12-17 03:41 |
| 初级用户 发帖 37 积分 42 | |
|
菜鸟看,带空格问题请看这里! 来DOS联盟论坛时间不长,进步非常快,学到不少东西。
搜索让人进步很快,发问之前最好在论坛搜索相关主题,当然象我一样经常不知道搜索什么关键字的就不好办了,发帖求助吧,哈哈! 看到时不时有许多像我一样的新手发帖求助“带(含)空格”的问题,特意搜索整理一下相关主题。 1.双引号"" (1)普通带空格路径 Examples: @echo off C:\Program Files\WinRAR\WinRAR.exe exit 错误提示: 'C:\Program' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决办法: @echo off "C:\Program Files\WinRAR\WinRAR.exe" exit (示例中的C:\Program Files也可以用环境变量%ProgramFiles%或者短名C:\Progra~1代替) (2)设置变量获取带空格路径 Examples: @echo off for /r %%a in ("*.txt") do ( set str=%%a ) 错误提示: 其中%%a无法正确获取*.txt中含有空格文件名的值 解决办法: @echo off for /r %%a in ("*.txt") do ( set "str=%%a" ) Examples: @echo off for /f "tokens=*" %%a in ('dir /a /b /s d:\test') do ( rd /s /q %%a del /q /f %%a ) 错误提示: 无法删除带空格文件及文件夹 解决办法: @echo off for /f "tokens=*" %%a in ('dir /a /b /s d:\test') do ( rd /s /q "%%a" del /q /f "%%a" ) 2.start的问题 Examples: @echo off start "C:\Program Files\WinRAR\WinRAR.exe" exit 错误提示: 你会发现批处理不是运行指定程序,而是调了另外一个CMD出来,郁闷! 解决办法: @echo off start "" "C:\Program Files\WinRAR\WinRAR.exe" exit (至于为什么,start/?得到相关信息。START "title"在窗口标题栏中显示的标题。路径带引号,因此title设置为空. ) 3.FOR语句中带空格路径的问题 Examples: FOR /F %%i IN ('DIR "C:\program files\WinRAR\*.rar" /s/b') 错误提示: %%i 只能获取 c:\program 解决办法:使用扩展参数usebackq后给路径加双引号就行了 FOR /F "usebackq delims=" %%i IN (`DIR "C:\program files\WinRAR\*.rar" /s/b`) 4.findstr查找带空格字符串的问题 Examples: set drive=d: for /f "delims=" %%i in ('dir /b %drive%^|findstr /e " "') do (rd "%drive%\%%i\") 错误提示: findstr命令语法不正确 解决办法: findstr /e /c:" "' [ Last edited by 15935643331 on 2008-12-17 at 03:47 ] |
|
| 第2楼 tireless | 发表于 2008-12-17 09:59 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
有两个地方我觉得解释有误。
1、 (2)设置变量获取带空格路径 不会出现错误吧?用 set 设置变量,我知道有两点好处: ① 防止不小心修改了代码。如清空变量: set "str=" ② 如果要设置变量 str 的值为 a,并用连接符(&)再执行一个命令,以下是错误的: set str=a & goto next 这样设置的 str 的值为“a ”(后面还有一个空格)。加上双引号就没事了: set "str=a" & goto next 或者紧凑一点: set str=a&goto next 这样不是很好看。 2、 3.FOR语句中带空格路径的问题 避免了错误的原因并不是 usebackq 吧,而是 "delims="。 usebackq 的三个用法: ① 字符串 for /f "usebackq" %a in ('a b') do @echo %a ② 带空格路径 for /f "usebackq" %a in ("C:\a b.txt") do @echo %a ③ 命令 for /f "usebackq" %a in (`path`) do @echo %a |
|
| 第3楼 HAT | 发表于 2008-12-17 10:09 |
| 版主 发帖 5,017 积分 9,023 | |
|
Q: 为方便他人复制,如何给代码加code标签?
A: http://www.cn-dos.net/forum/viewthread.php?tid=43735#pid304733 参考:http://www.cn-dos.net/forum/faq.php?page=misc#1 |
|
| 第4楼 evilnight | 发表于 2008-12-17 11:46 |
| 新手上路 发帖 3 积分 4 | |
|
原来如此,我还以为usebackq这个什么用呢,学习了
|
|
| 第5楼 15935643331 | 发表于 2008-12-17 13:56 |
| 初级用户 发帖 37 积分 42 | |
|
恩。我体会的也不是很深,只是在本坛搜索总结的,慢慢体会吧
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |