我正在嘗試建立一個批次文件,在所有公司電腦和筆記型電腦上安裝收藏夾。
是否可以使用 CMD 更改目錄shell:favorites
?
我需要這個,因為在筆記型電腦上,收藏夾存放在本地C:\%userprofile%\Favorites
,而桌面上%userprofile%
通常也存儲在桌面上,C:\ drive
但收藏夾保存在主驅動器上。我們不使用諸如H:\
映射驅動器之類的字母,而只是使用網路快捷方式,這就是我如此努力使其工作的原因。
我們在不同的國家/地區有不同的伺服器,因此我不想根據本地伺服器的網路路徑為每個國家/地區調整我的批次腳本。
答案1
可以使用powershell來完成
cd ([Environment]::GetFolderPath("Favorites"))
答案2
幫助腳本
命令列處理器支援一些環境變數用於系統和使用者路徑,或可以以其他方式幫助建構它們。他們是:
ALLUSERSPROFILE
APPDATA
CommonProgramFiles
CommonProgramFiles(x86)
CommonProgramW6432
COMPUTERNAME
HOMEDRIVE
HOMEPATH
LOCALAPPDATA
LOGONSERVER
ProgramData
ProgramFiles
ProgramFiles(x86)
ProgramW6432
PUBLIC
SystemDrive
SystemRoot
TEMP
TMP
USERDOMAIN
USERDOMAIN_ROAMINGPROFILE
USERNAME
USERPROFILE
windir
您可以鍵入set | more
以查看完整清單以及指派的值。然而,沒有一種本機方法可以取得未列出的特定路徑,除非您可以組合一個或多個變數並手動建立實際路徑。
您可以在下面找到幾個混合批次腳本,它們可以檢索與特定的路徑關聯的路徑外殼資料夾。將任一程式碼另存為ShellHelper.cmd
(或任何您喜歡的內容,只需保留.cmd
副檔名)。這些腳本接受一個參數,即 shell 資料夾標識符(例如Favorites
)。然後該路徑將儲存在%shellFolder%
變數中。
用法範例
ShellHelper.cmd Favorites >nul
if defined shellFolder pushd "%shellFolder%"
評論
與 Powershell 版本不同,VBScript 版本可以在 Windows 2000 及更高版本中開箱即用。至於您的具體用途,任一版本都可以。
PowerShell 內建於 Windows 7 及更高版本中,但在早期作業系統中必須手動安裝。
VBScript版本
主要功勞歸功於 jeb 和 dbenham,他們提出(並改進)了這裡使用的混合技術。
REM^ &@echo off
REM^ &set shellFolder=
REM^ &if "%~1" == "" exit /b 2
REM^ &for /f "delims=" %%G in ('"cscript /nologo /e:vbscript "%~f0" %~1 "') do set shellFolder=%%~G
REM^ &exit /b
WScript.Echo WScript.CreateObject("WScript.Shell").SpecialFolders.Item(WScript.Arguments(0))
支援的標識符
AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
Desktop
Favorites
Fonts
MyDocuments
NetHood
PrintHood
Recent
SendTo
StartMenu
Startup
Templates
筆記將最後一行替換為以下內容可以支援其他 shell 資料夾:
WScript.Echo WScript.CreateObject("Shell.Application").Namespace(CLng(WScript.Arguments(0))).Self.Path
在這種情況下,要取得特定的 shell 資料夾路徑,您需要傳遞其指派的數值。例如,要取得Favorites
路徑,您必須使用的值是6
。您可以在下面的連結文章中找到所有值及其含義。
進一步閱讀
PowerShell版本
@echo off
set shellFolder=
if "%~1" == "" exit /b 2
set _params=-NoLogo -NoProfile -Noninteractive -ExecutionPolicy Bypass
set _command="([Environment]::GetFolderPath('%~1'))"
for /f "usebackq delims=" %%G in (`powershell %_params% -Command %_command%`) do set shellFolder=%%~G
set _params=
set _command=
exit /b
支援的標識
ApplicationData
CommonApplicationData
CommonProgramFiles
Cookies
Desktop
DesktopDirectory
Favorites
History
InternetCache
LocalApplicationData
MyComputer
MyDocuments
MyMusic
MyPictures
Personal
ProgramFiles
Programs
Recent
SendTo
StartMenu
Startup
System
Templates
PowerShell 3.0 / .NET Framework 4.0 及更高版本
除了上面的標識符之外,還可以使用以下標識符:
AdminTools
CDBurning
CommonAdminTools
CommonDesktopDirectory
CommonDocuments
CommonMusic
CommonOemLinks
CommonPictures
CommonProgramFilesX86
CommonPrograms
CommonStartMenu
CommonStartup
CommonTemplates
CommonVideos
Fonts
LocalizedResources
MyVideos
NetworkShortcuts
PrinterShortcuts
ProgramFilesX86
Resources
SystemX86
UserProfile
Windows
筆記若要取得可用列表,您可以在 PowerShell 控制台中執行以下命令:
[Enum]::GetNames('System.Environment+SpecialFolder') | Sort-Object