Board logo

标题: [系统相关] 批处理变量中引用的变量如何解决? [打印本页]

作者: gudou    时间: 2011-10-11 18:16     标题: 批处理变量中引用的变量如何解决?

可能标题说的不清楚……

思路:从注册表中提取当前系统“桌面”对应的目录,一般是“ %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"

有什么办法么?
作者: gudou    时间: 2011-10-11 18:25

因为系统“桌面”对就的文件夹是可更改的,所以请不要说“直接用%USERPROFILE%\桌面来代替%aa%”类的解决方法
作者: gudou    时间: 2011-10-11 18:45

我现在用的是临时文件法……有更好解决方法么?

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
作者: CrLf    时间: 2011-10-11 19:01

call echo %aa%
作者: CrLf    时间: 2011-10-11 21:06

不过从效率上考虑,还是建议先一次性写入临时bat再运行。把%替换为!再处理也可,但%也可能是文件名的一部分
作者: applba    时间: 2011-10-12 06:16

用vbs
WSHshell 的specialfolder




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