标题: [其他] [已解决]批处理命令for中的变量包含括号怎么处理 [打印本页]
作者: 522235677 时间: 2016-10-31 13:28 标题: [已解决]批处理命令for中的变量包含括号怎么处理
- for %%i in (...) do (
- reg add HKEY_CLASSES_ROOT\isfile\shell\open\command /ve /d "\"%~dp0v.bat\" \"%%1\"" /f >nul
- )
复制代码
%~dp0 路径包含括号,每次处理到这里就出错。大神该觉得怎么处理?
作者: GNU 时间: 2016-10-31 13:52
- @echo off
- for %%i in (*.txt) do (
- echo %~dp0
- )
- pause
复制代码
我这里测试没有报错
作者: aa77dd@163.com 时间: 2016-10-31 13:53
回复 1# 522235677
我处理路径的习惯是必须加双引号复制代码
作者: 522235677 时间: 2016-10-31 14:15
回复 3# aa77dd@163.com
%~f0 是个方法,我也没想起来。
加引号的目的是为了防止路径含有空格。和括号不搭嘎吧
作者: 522235677 时间: 2016-10-31 14:29
回复 2# GNU
are you sure? 是路径哦,你不会就改文件名吧
作者: aa77dd@163.com 时间: 2016-10-31 14:34
回复 4# 522235677
双引号可以让很多字符失去语法意义, 不止是空格而已, 你出错的代码用这种方式再看看
作者: 522235677 时间: 2016-10-31 15:02
本帖最后由 522235677 于 2016-10-31 15:03 编辑
回复 6# aa77dd@163.com
你淫了- reg add HKEY_CLASSES_ROOT\isfile\shell\open\command /ve /d "\"%~dp0v.bat\" \"%%1\"" /f >nul
复制代码
看一下这个怎么处理
除了用%~dpf0 的情况下
作者: GNU 时间: 2016-10-31 16:36
回复 7# 522235677
test.bat- @echo off
- reg add HKEY_CLASSES_ROOT\isfile\shell\open\command /ve /d "\"%~dp0v.bat\" \"%%1\"" /f
复制代码
我的 Win7 测试没有报错
你是在CMD里面执行的 reg add 命令?
作者: 522235677 时间: 2016-10-31 18:12
回复 8# GNU
你这样就是正常的,问题是在for里面,并且%~dp0路径包含括号
作者: WHY 时间: 2016-10-31 18:54
原因是 %~dp0 暴露在引号对之外,%~dp0 的展开优先于 %%i 的展开
办法1:开启变量延迟- @echo off
- set "s=%~dp0"
- for %%i in (1) do (
- setlocal enabledelayedexpansion
- reg add HKEY_CLASSES_ROOT\isfile\shell\open\command /ve /d "\"!s!v.bat\" \"%%1\"" /f >nul
- endlocal
- )
- pause
复制代码
办法2:把 %~dp0 放到 for 中- @echo off
- for %%i in ("%~dp0") do (
- reg add HKEY_CLASSES_ROOT\isfile\shell\open\command /ve /d "\"%%~iv.bat\" \"%%1\"" /f >nul
- )
- pause
复制代码
作者: 522235677 时间: 2016-10-31 19:04
回复 10# WHY
不错的方法
作者: GNU 时间: 2016-11-1 08:59
回复 9# 522235677
其实我就是想表达你为什么不在最开始发帖求助的时候就在顶楼给出报错的代码,非要让别人去猜测。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |