会社のすべての PC とノートブックにお気に入りをインストールするバッチ ファイルを作成しようとしています。
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
入力すると、割り当てられた値とともに完全なリストが表示されます。ただし、1 つ以上の変数を組み合わせて実際のパスを手動で構築しない限り、リストさset | more
れていない特定のパスを取得するネイティブな方法はありません。
以下に、特定のパスを取得できるハイブリッドバッチスクリプトをいくつか紹介します。シェルフォルダいずれかのコードを として保存しますShellHelper.cmd
(または任意の.cmd
名前で保存します。拡張子はそのままにしてください)。スクリプトは、シェル フォルダー識別子 (例Favorites
) である 1 つのパラメーターを受け入れます。パスは変数に保存されます%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
注記最後の行を次のように置き換えることで、追加のシェル フォルダーをサポートできます。
WScript.Echo WScript.CreateObject("Shell.Application").Namespace(CLng(WScript.Arguments(0))).Self.Path
この場合、特定のシェル フォルダー パスを取得するには、割り当てられた数値を渡す必要があります。たとえば、Favorites
パスを取得するには、 という値を使用する必要があります6
。すべての値とその意味については、以下のリンク先の記事を参照してください。
参考文献
- コマンドラインリファレンス
- 一時ファイルを使用せずに、バッチ ファイル内に VBScript を埋め込んで実行することは可能ですか?
- 特殊フォルダの操作
- ShellSpecialFolderConstants 列挙
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
サポートされているID
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