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

[系统相关] 批处理变量中引用的变量如何解决?

[复制链接]
发表于 2011-10-11 18:16:39 | 显示全部楼层 |阅读模式
可能标题说的不清楚……

思路:从注册表中提取当前系统“桌面”对应的目录,一般是“ %USERPROFILE%\桌面 ”(实际对应:C:\Documents and Settings\Administrator),赋值为变量 aa,COPY是用到%aa%,结果提示找不到路径,原来aa的值是“%USERPROFILE%\桌面”,COPY无法找到对应字符,直接显示成 copy "E:\Program Files\EDU\直接采集.txt" "%USERPROFILE%\桌面\直接采集.txt",而不是显示成 copy "E:\Program Files\EDU\直接采集.txt" "C:\Documents and Settings\Administrator\桌面\直接采集.txt",

setlocal enabledelayedexpansion
set "r=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
for /f "skip=2 tokens=3" %%b in ('reg query "%r%" /v "desktop"') do set aa=%%b
pause
copy "E:\Program Files\EDU\直接采集.txt" "%aa%\直接采集.txt"

有什么办法么?

评分

参与人数 1PB -2 收起 理由
Batcher -2 请编辑自己的帖子,把代码放到code标签里面 ...

查看全部评分

 楼主| 发表于 2011-10-11 18:25:33 | 显示全部楼层
因为系统“桌面”对就的文件夹是可更改的,所以请不要说“直接用%USERPROFILE%\桌面来代替%aa%”类的解决方法
 楼主| 发表于 2011-10-11 18:45:57 | 显示全部楼层
我现在用的是临时文件法……有更好解决方法么?

DEL "%temp%"\Run.bat
setlocal enabledelayedexpansion
set "r=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
for /f "skip=2 tokens=3" %%b in ('reg query "%r%" /v "desktop"') do (
echo copy "E:\Program Files\EDU\直接采集.txt" "%%b"\直接采集.txt>>"%temp%\run.bat
echo DEL "%temp%"\Run.bat>>"%temp%\run.bat
)
"%temp%\run.bat
发表于 2011-10-11 19:01:33 | 显示全部楼层
call echo %aa%
发表于 2011-10-11 21:06:32 | 显示全部楼层
不过从效率上考虑,还是建议先一次性写入临时bat再运行。把%替换为!再处理也可,但%也可能是文件名的一部分
发表于 2011-10-12 06:16:08 | 显示全部楼层
用vbs
WSHshell 的specialfolder
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 03:27 , Processed in 0.019344 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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