[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

可能标题说的不清楚……

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

有什么办法么?
1

评分人数

    • Batcher: 请编辑自己的帖子,把代码放到code标签里面 ...PB -2

用vbs
WSHshell 的specialfolder

TOP

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

TOP

call echo %aa%

TOP

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

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

TOP

因为系统“桌面”对就的文件夹是可更改的,所以请不要说“直接用%USERPROFILE%\桌面来代替%aa%”类的解决方法

TOP

返回列表