幫助腳本

幫助腳本

我正在嘗試建立一個批次文件,在所有公司電腦和筆記型電腦上安裝收藏夾。

是否可以使用 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

進一步閱讀

相關內容