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

[系统相关] 【共同接龙补充】BAT脚本文件中可用的变量集合

一些现成可用的变量对脚本代码大为简化方便,获取的信息准确。
现立一专贴于此,请大家接龙补充完善,将自己所了解知道掌握的知识分享出来,集中收集于此,于大家于论坛都是一个奉献!!
接龙补充下去吧……



文件夹及参数信息             win 7 中可用变量                       win 10 中可用变量
                               
系统目录:                                                            %WINDIR%                                                         %WINDIR% 
当前登录的用户的名称:                                    %USERNAME%                                                    %USERNAME% 
当前目录:                                                      %CD%                                                               %CD%
计算机的名称:                                                %COMPUTERNAME%                                   %COMPUTERNAME%
可执行文件的搜索路径:                                         %PATH%                                                        %PATH%
我的文档:                               
收藏夹:                               
我的视频:                               
我的音乐:                               
我的图片:                               
桌面:                               
下载:                               
历史记录:                               
IE Cookie:                               
最近文档:                               
IE 缓存:                               
模板文件:                               
临时文件:

以上有些没有发现有单独的变量使用(仅仅是我没有找到哈),但可以在注册表中查询得到的,诸如:“我的文档”、“我的图片”、“我的收藏夹”等等目录。
REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"

For /f  "skip=2tokens=2*delims= " %i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v  Favorites') do echo %j

For /f  "tokens=3*" %i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v  "My Pictures" ^|find "REG_" ') do echo %j

  1. %ALLUSERSPROFILE%
  2. 本地
  3. 返回“所有用户”配置文件的位置。
  4. %APPDATA%
  5. 本地
  6. 返回默认情况下应用程序存储数据的位置。
  7. %CD%
  8. 本地
  9. 返回当前目录字符串。也就是获得当前路径,并将其转换为字符串。
  10. %CMDCMDLINE%
  11. 本地
  12. 返回用来启动当前的Cmd.exe的准确命令行。
  13. %CMDEXTVERSION%
  14. 系统
  15. 返回当前的“命令处理程序扩展”的版本号。
  16. %COMPUTERNAME%
  17. 系统
  18. 返回计算机名称。
  19. %COMSPEC%
  20. 系统
  21. 返回命令行解释器可执行程序的准确路径。也就是返回cmd.exe的路径,一般在C:\WINDOWS\system32\cmd.exe。
  22. %DATE%
  23. 系统
  24. 返回当前日期字符串。和使用date/t效果一样。
  25. %ERRORLEVEL%
  26. 系统
  27. 返回上一条命令的错误代码。通常用0表示正确,非零表示错误。
  28. %HOMEDRIVE%
  29. 系统
  30. 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
  31. %HOMEPATH%
  32. 系统
  33. 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
  34. %HOMESHARE%
  35. 系统
  36. 返回用户的共享目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
  37. %LOGONSERVER%
  38. 本地
  39. 返回验证当前登录会话的域控制器的名称。
  40. %NUMBER_OF_PROCESSORS%
  41. 系统
  42. 指定安装在计算机上的处理器数目(所有CPU的总核心数)。
  43. %OS%
  44. 系统
  45. 返回操作系统名称。
  46. %PATH%
  47. 系统
  48. 指定可执行文件的搜索路径。也就是在这些目录下的可执行文件(不仅仅是.exe,可以用echo %PATHEXT%查看哪些属于可执行文件。)可以直接在开始-->运行里直接执行,当然也可以再命令提示符、批处理中直接执行。例如记事本文件位于C:\WINDOWS\NOTEPAD.EXE,那么我们点击“开始-->运行,输入NOTEPAD”就可以打开记事本了。或者我们打开CMD窗口,直接输入NOTEPAD也可以打开记事本。
  49. %PATHEXT%
  50. 系统
  51. 返回操作系统认为可执行的文件扩展名的列表。
  52. %PROCESSOR_ARCHITECTURE%
  53. 系统
  54. 返回处理器的芯片体系结构。返回值为x86或IA64或RISC。这些都是常见的架构,或者称作指令集。Windows操作系统都是基于x86架构开发的,国产CPU不是采用x86指令集,所以无法运行Windows。
  55. %PROCESSOR_IDENTFIER%
  56. 系统
  57. 返回处理器说明。
  58. %PROCESSOR_LEVEL%
  59. 系统
  60. 返回计算机上安装的处理器型号。
  61. %PROCESSOR_REVISION%
  62. 系统
  63. 返回处理器版本号。
  64. %PROMPT%
  65. 本地
  66. 返回当前解释程序的命令提示符设置。由Cmd.exe生成。
  67. %RANDOM%
  68. 系统
  69. 返回0到32767之间的任意十进制数字。由Cmd.exe生成。
  70. %SYSTEMDRIVE%
  71. 系统
  72. 返回包含Windows server operation system根目录(即系统根目录)的驱动器。
  73. %SYSTEMROOT%
  74. 系统
  75. 返回Windows server operation system根目录位置。
  76. %TEMP%和%TMP%
  77. 系统用户
  78. 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要TEMP,而其他应用程序则需要TMP。
  79. %TIME%
  80. 系统
  81. 返回当前时间字符串。使用与time /t命令相同的格式。
  82. %USERDOMAIN%
  83. 本地
  84. 返回包含用户账户的域的名称。
  85. %USERNAME%
  86. 本地
  87. 返回当前登录的用户的名称。
  88. %USERPROFILE%
  89. 本地
  90. 返回当前用户的配置文件的位置。
  91. %WINDIR%
  92. 系统
  93. 返回操作系统目录的位置。
复制代码

TOP

“我的文档”、“我的图片”、“我的收藏夹”等等目录可使用%USERPROFILE%。
比如“我的文档”路径:%USERPROFILE%\Documents

TOP

set 就能看到了, set 还会列出一下 下表 中没有的诸如: %NUMBER_OF_PROCESSORS%, %PROCESSOR_ARCHITECTURE% 之类的变量

以下是默认值( https://en.wikipedia.org/wiki/Environment_variable#Default_values )

VariableLocale specificWindows XP  (CMD)Windows Vista  and later (CMD)
%ALLUSERSPROFILE%YesC:\Documents  and Settings\All UsersC:\ProgramData
%APPDATA%YesC:\Documents  and Settings\{username}\Application DataC:\Users\{username}\AppData\Roaming
%CommonProgramFiles%YesC:\Program  Files\Common FilesC:\Program  Files\Common Files
%CommonProgramFiles(x86)%YesC:\Program  Files (x86)\Common Files (only in 64-bit version)C:\Program  Files (x86)\Common Files (only in 64-bit version)
%CommonProgramW6432%Yes%CommonProgramW6432% (not supported, not replaced  by any value)C:\Program  Files\Common Files (only in 64-bit version)
%COMPUTERNAME%No{computername}{computername}
%ComSpec%NoC:\Windows\System32\cmd.exeC:\Windows\System32\cmd.exe
%HOMEDRIVE%NoC:C:
%HOMEPATH%Yes\Documents  and Settings\{username}\Users\{username}
%LOCALAPPDATA%Yes%LOCALAPPDATA% (not supported, not replaced  by any value)C:\Users\{username}\AppData\Local
%LOGONSERVER%No\\{domain_logon_server}\\{domain_logon_server}
%PATH%YesC:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;{plus  program paths}C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;{plus  program paths}
%PATHEXT%No.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.WSF;.WSH.com;.exe;.bat;.cmd;.vbs;.vbe;.js;.jse;.wsf;.wsh;.msc
%ProgramData%Yes%ProgramData% (not supported, not replaced  by any value)%SystemDrive%\ProgramData
%ProgramFiles%Yes%SystemDrive%\Program Files%SystemDrive%\Program  Files
%ProgramFiles(x86)%Yes%SystemDrive%\Program Files (x86) (only in  64-bit version)%SystemDrive%\Program  Files (x86) (only in 64-bit version)
%ProgramW6432%Yes%ProgramW6432% (not supported, not replaced  by any value)%SystemDrive%\Program  Files (only in 64-bit version)
%PROMPT%NoCode  for current command prompt format, usually $P$GCode  for current command prompt format, usually $P$G
%PSModulePath% %PSModulePath% (not supported, not replaced  by any value)%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules\
%PUBLIC%Yes%PUBLIC% (not supported, not replaced  by any value)%SystemDrive%\Users\Public
%SystemDrive%NoC:C:
%SystemRoot%NoThe  Windows directory, usually C:\Windows, formerly C:\WINNT%SystemDrive%\Windows
%TEMP% and %TMP%Yes%SystemDrive%\Documents and Settings\{username}\Local Settings\Temp%SystemRoot%\TEMP  (for system environment  variables %TMP% and %TEMP%), %USERPROFILE%\AppData\Local\Temp (for  user environment variables %TMP% and %TEMP%)
%USERDOMAIN%No{userdomain}{userdomain}
%USERNAME%No{username}{username}
%USERPROFILE%Yes%SystemDrive%\Documents and Settings\{username}%SystemDrive%\Users\{username}
%windir%No%SystemDrive%\WINDOWS%SystemDrive%\Windows

TOP

%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

%HIGHESTNUMANODENUMBER% - 扩展到此计算机上的最高 NUMA 节点号。
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Administrator\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=20160423-131010
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\Administrator
LOCALAPPDATA=C:\Users\Administrator\AppData\Local
LOGONSERVER=\\20160423-131010
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32
\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C
:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files\Microsoft SQ
L Server\100\Tools\Binn\VSShell\Common7\IDE\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 20 Model 2 Stepping 0, AuthenticAMD
PROCESSOR_LEVEL=20
PROCESSOR_REVISION=0200
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\ADMINI~1\AppData\Local\Temp
TMP=C:\Users\ADMINI~1\AppData\Local\Temp
USERDOMAIN=20160423-131010
USERNAME=Administrator
USERPROFILE=C:\Users\Administrator
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
VS90COMNTOOLS=c:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\
windir=C:\Windows
windows_tracing_flags=3
windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log
_DFX_INSTALL_UNSIGNED_DRIVER=1
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

伪环境变量

https://en.wikipedia.org/wiki/Environment_variable#Windows_2

DOS 和 Windows 中的命令处理器也支持伪环境变量。这些是像环境变量一样获取的值,但并非真正存储在环境中,而是在请求时进行计算。

动态环境变量 (DOS 下也称为内部变量或系统信息变量 )是 CMD 启用命令行扩展时支持的伪环境变量,每次查询时扩展为各种离散值,即多次查询时其值可以改变即使在同一个命令中.虽然它们可以在批处理作业中和在提示符下使用,但它们不存储在环境中.因此,它们既不由 SET 外部程序列出,也不存在供外部程序读取.它们不区分大小写.

间接地,它们在 Windows 下也受 COMMAND.COM(已被修改为内部调用 CMD.EXE 以执行命令) 的支持.

%CD%

CD 当不带参数调用时,这个伪变量扩展到当前目录,相当于命令的输出.虽然 CMD.EXE 根据当前目录可以返回长文件名,但 COMMAND.COM 下当前目录始终为 8.3 格式的事实将导致它返回 COMMAND.COM 下的短文件名,即使 COMMAND 在内部调用 CMD.

%CMDCMDLINE%

这个伪变量扩展为 CMD.EXE 的原始启动参数, 例如 "C:\Windows\system32\cmd.exe". 在 Windows' COMMAND.COM 下,由于内部 COMMAND.COM 调用 CMD.EXE ,这可能会返回类似 "C:\Windows\system32\cmd.exe /c ..." 的内容.

%CMDEXTVERSION%

如果启用,此伪变量将扩展为 CMD.EXE 的命令行扩展版本(例如Windows NT下为 "1", ,Windows 2000 和 Windows XP 下为 "2", (经测: Windows 10 下也为 "2" ) ).

%DATE%

这个伪变量扩展到当前日期.日期根据当前用户的日期格式首选项显示.

%ERRORLEVEL%

这个伪变量扩展到最后设置的错误级别,一个介于 "0" 和 "255" 之间的值(没有前导零). 外部命令和一些内部命令在执行时设置错误级别.另请参阅 DR-DOS 下的同名伪变量 %ERRORLEVEL% 和 IF ERRORLEVEL 命令.

%RANDOM%

这个伪变量返回一个介于 "0" 和 "32767" 之间的随机数.

%TIME%

这个伪变量返回当前时间.时间根据当前用户的时间格式首选项显示.如果 %TIME% 和 %DATE% 变量被同时使用,那么以这个特定的指令快速连续读取它们是很重要的,以避免午夜翻转问题。

TOP

本帖最后由 locoman 于 2021-7-30 13:48 编辑
“我的文档”、“我的图片”、“我的收藏夹”等等目录可使用%USERPROFILE%。
比如“我的文档”路径:%USER ...
qixiaobin0715 发表于 2021-7-30 11:48



  这个有点不可靠!
只有这些特殊目录没有被改动过,%USERPROFILE%\Documents,这样才是正确的。
一旦被改动过,它还是返回C:\Users\Administrator\Documents,但是,实际已不是这里了。
注册表获取要准确些吧。

TOP

For /f  "skip=2tokens=2*delims= " %i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v  Favorites') do echo %j

For /f  "tokens=3*" %i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v  "My Pictures" ^|find "REG_" ') do echo %j




这样反而把代码搞复杂了。

TOP

注意:杀软对这几条具有同样意义作用的代码,其敏感度不同,从高到低的是:
echo %username%
net user
whoami

TOP

-----------处理器体系结构
echo %PROCESSOR_architecture%
x86
或者AMD64

TOP

返回列表