我正在编写一个 Windows 批处理文件,并且想要将某些内容复制到桌面。我想我可以用这个:
%UserProfile%\桌面\
但是,我在想,这可能只适用于英语操作系统。有没有办法在批处理文件中执行此操作,该文件适用于任何国际化版本?
更新
我尝试了以下批处理文件:
REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop
FOR /F "usebackq tokens=3 skip=4" %%i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) DO SET DESKTOPDIR=%%i
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
并得到这个输出:
S:\>REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹" /v 桌面 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹 桌面 REG_EXPAND_SZ %USERPROFILE%\Desktop S:\>FOR /F "usebackq tokens=3 skip=4" %i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹 s" /v 桌面`) 请设置 DESKTOPDIR=%i S:\>FOR /F "usebackq delims=" %i in (`ECHO ECHO 已打开。`) 请设置 DESKTOPDIR=%i S:\>SET DESKTOPDIR=ECHO 已打开。 S:\>ECHO ECHO 已打开。 ECHO 已打开。
为了安全起见,您应该在 Powershell(或 VBScript)中使用正确的 API
使用 PowerShell:
[Environment]::GetFolderPath("Desktop")
使用 Powershell 复制内容:
Copy-Item $home\*.txt ([Environment]::GetFolderPath("Desktop"))
这是一个获取桌面路径的 VBScript 示例:
dim WSHShell, desktop, pathstring, objFSO
set objFSO=CreateObject("Scripting.FileSystemObject")
Set WSHshell = CreateObject("WScript.Shell")
desktop = WSHShell.SpecialFolders("Desktop")
pathstring = objFSO.GetAbsolutePathName(desktop)
WScript.Echo pathstring
我发现最好的解决方案是使用 vbscript 和批处理文件。
这是批处理文件:
@ECHO OFF
FOR /F "usebackq delims=" %%i in (`cscript findDesktop.vbs`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
这是findDesktop.vbs文件:
set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
wscript.echo(strDesktop)
可能还有其他解决方案,但我个人认为这个解决方案不那么黑客。
我在一台英语电脑和一台法语电脑上测试了这个 - 它似乎可以工作(Windows XP)。
编辑: 使用接受的答案,如果未使用默认位置,这将不起作用,例如:用户将桌面移动到另一个驱动器,例如 D:\Desktop
至少在 Windows XP、Vista 和 7 上您可以安全地使用
"%UserProfile%\Desktop"
。
Windows XP en-US 它将扩展为
"C:\Documents and Settings\YourName\Desktop"
"C:\Documents and Settings\YourName\Desktop"
"C:\Users\YourName\Desktop"
"C:\Usuarios\YourName\Desktop"
在 XP 上,您不能将其用于除桌面之外的其他文件夹
My documents
转向Meus Documentos
和Local Settings
转向Configuracoes locais
我个人认为在投影操作系统时这是一件坏事。
KB 的答案是使用
[Environment]::GetFolderPath("Desktop")
显然是执行此操作的官方 Windows API。
但是,如果您在提示符下进行交互工作,或者只是想要在您的计算机上运行的东西,则 tilda (~) 字符指的是当前用户的主文件夹。所以
~/desktop
是用户的桌面文件夹。
这不仅不适用于国际版 Windows,而且如果用户编辑注册表以使其桌面文件夹驻留在其他位置,也会失败。您可以使用
REG
命令在注册表中查询文件位置:
REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop
要将其放入变量中,请使用以下内容:
FOR /F "usebackq tokens=3 skip=4" %%i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) DO SET DESKTOPDIR=%%i
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
您还可以打开 DOS 命令提示符并执行 set 命令。
这将使您了解系统上有哪些可用的环境变量。
例如- 既然您特别要求非英语 Windows - 这是我自己的德语版(Window7-64 位) :
的示例设置 > env.txt 输入 env.txt ALLUSERSPROFILE=C:\ProgramData APPDATA=C:\Users\SOF\AppData\Roaming CommonProgramFiles=C:\Program Files\Common 文件 CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files CommonProgramW6432=C:\Program Files\公共文件 计算机名=VMSOF ComSpec=C:\Windows\system3