本帖最后由 bluesnan 于 2012-3-4 16:10 编辑
最近发现在for命令下无法直接使用系统变量的问题,比如我想从注册表获取系统桌面的路径,然后删除某个特定的文件:- @echo off
- FOR /F "skip=4 delims= tokens=2*" %%a in ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Desktop"') do
-
- (
- echo %%b
- DEL /F /Q "%%b\文件名.txt"
- )
- pause
复制代码 如果以上Common Desktop的值是“%ALLUSERSPROFILE%\桌面”,那么Del命令就会无法执行;
如果Common Desktop的值是绝对的“C:\Documents and Settings\All Users\桌面”,那么Del命令就能成功执行。
我目前采用的变通方法是调用一个中间的bat文件来实现:- FOR /F "skip=4 delims= tokens=2*" %%a in ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Desktop"') do (
- ECHO DEL /F /Q "%%b\文件名.txt">"C:\MoveLink.bat"
- CALL "C:\MoveLink.bat"
- )
复制代码 ========================
上面仅仅是举一个例子,我实际的命令要比这复杂的多。采用中间调用bat的方法虽然能解决问题,但是修改代码比较费眼神。所以,有没有更好的解决办法?
我需要使用的系统路径有"桌面、开始菜单、我的文档、收藏夹"等等,从注册表中获取路径,如果包含%USERPROFILE%和%ALLUSERSPROFILE%就很麻烦的。 |