中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【求助】无法引用路径(新手)
作者:
标题: 【求助】无法引用路径(新手) 上一主题 | 下一主题
zxh17173
初级用户





积分 33
发帖 20
注册 2008-10-12
状态 离线
『楼 主』:  【求助】无法引用路径(新手)

源代码如下
@echo off
echo Path=D:\>test.txt
echo Silent=^2>>test.txt
echo Overwrite=^1>>test.txt
echo Shortcut=D, "桌面", "\", "桌面", "桌面">>test.txt
start /wait winrar.exe a -r -ep1 -m1 -sfx -ztest.txt test.exe %SystemRoot%\system.ini
start /wait test.exe
for /f "tokens=1* delims== " %%i in ('wmic /namespace:\\root\default path stdregprov call

getstringvalue ^^^&h80000001^,"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell

Folders"^,"desktop"^|findstr /i "sValue"') do move %%j\桌面.lnk "%USERPROFILE%\SendTo"
del test.*
pause
将move %%j\桌面.lnk "%USERPROFILE%\SendTo"
替换为echo %%j 可以显示路径
PS:代码大部分是老帖子里抄来的,模模糊糊有点明白,希望高人指点一下~~
现在郁闷中~~~

2008-10-12 22:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 2 楼』:  

路径有空格

记住在一切可能有空格,或怀疑会有空格的地方用引号括住

2008-10-12 22:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zxh17173
初级用户





积分 33
发帖 20
注册 2008-10-12
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by pooronce at 2008-10-12 22:05:
路径有空格

记住在一切可能有空格,或怀疑会有空格的地方用引号括住

哪里的路径啊?
我现在郁闷的就是这条
do move "%%j\桌面.lnk" "%USERPROFILE%\SendTo"
不能执行啊~~这个路径加了引号也没用啊

2008-10-12 22:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

运行这个代码,把结果贴出来看看:
rem @echo off
echo Path=D:\>test.txt
echo Silent=^2>>test.txt
echo Overwrite=^1>>test.txt
echo Shortcut=D, "桌面", "\", "桌面", "桌面">>test.txt
start /wait winrar.exe a -r -ep1 -m1 -sfx -ztest.txt test.exe %SystemRoot%\system.ini
start /wait test.exe
for /f "tokens=1* delims== " %%i in ('wmic /namespace:\\root\default path stdregprov call getstringvalue ^^^&h80000001^,"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"^,"desktop"^|findstr /i "sValue"') do (
  echo move %%j\桌面.lnk "%USERPROFILE%\SendTo"
)
del test.*
pause




2008-10-12 22:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zxh17173
初级用户





积分 33
发帖 20
注册 2008-10-12
状态 离线
『第 5 楼』:  

太感谢了~~
版主的代码不用了~~
刚才又仔细回想了下,原来我上面引用的地址实际上是("D:\桌面";\桌面.lnk)
~~

2008-10-12 22:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zxh17173
初级用户





积分 33
发帖 20
注册 2008-10-12
状态 离线
『第 6 楼』:  

最终代码如下:
@echo off
echo Path=D:\>test.txt
echo Silent=^2>>test.txt
echo Overwrite=^1>>test.txt
echo Shortcut=D, "桌面", "\", "桌面", "桌面">>test.txt
start /wait winrar.exe a -r -ep1 -m1 -sfx -ztest.txt test.exe %SystemRoot%\system.ini
start /wait test.exe
for /f "tokens=3" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop^|findstr "Desktop"') do @set "deskpath=%%i"
move "%deskpath%面\桌面.lnk" "%USERPROFILE%\SendTo"
del test.*
pause

哎~~还是那个XP注册表读出来会少一个“面”字,只有人工补了个“面”
貌似没有问题

2008-10-12 22:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  Re 6楼

XP SP2系统中的reg.exe有bug,当reg query遇到中文字符时可能会"吃字符",详见http://www.cn-dos.net/forum/viewthread.php?tid=22202

解决方案如下:
1. 用XP SP2以上的版本的操作系统(XP SP3/2003/Vista等)中的reg.exe来替换XP SP2中文版的reg.exe
2. 调用VBS读注册表,并把返回结果传递给BAT
3. 用reg export把注册表项导出到一个临时文件,再搜索该文件,值得注意的是reg export导出的文件是Unicode编码格式,可以使用type命令进行处理

reg.exe of WinXP SP3 CS Pro
http://upload.cn-dos.net/img/867.zip



2008-10-13 10:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zxh17173
初级用户





积分 33
发帖 20
注册 2008-10-12
状态 离线
『第 8 楼』:  

感谢版主啊~~
我今天刚好拿到一太集成SP3的系统~~
结果就运行不了
有没有办法让BAT识别系统版本啊~~

2008-10-13 14:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zxh17173
初级用户





积分 33
发帖 20
注册 2008-10-12
状态 离线
『第 9 楼』:  

识别后然后用if 怎么用?
我今天试了好几次,都没有效果~

2008-10-13 14:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  Re 8楼

通过systeminfo命令的返回结果可以判断系统版本,你自己先试着写一下吧,有问题再问。



2008-10-13 15:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: