バッチファイルの同じパスの下にあるフォルダーとファイルをデスクトップにコピーする単純なバッチファイルを実行しています。を使用して、バッチファイルが配置されているパスを簡単に取得できます
%~dp0
しかし、私はユーザーのデスクトップのパスを取得する方法を知りたいです (私は Widows 7 Ultimate を使用しています)
助言がありますか?
バッチファイルの同じパスの下にあるフォルダーとファイルをデスクトップにコピーする単純なバッチファイルを実行しています。を使用して、バッチファイルが配置されているパスを簡単に取得できます
%~dp0
しかし、私はユーザーのデスクトップのパスを取得する方法を知りたいです (私は Widows 7 Ultimate を使用しています)
助言がありますか?
デスクトップの場所が別のフォルダーにある場合のみ、これが正解になります。
バッチ文字列:
for /f "usebackq tokens=3*" %%D IN (`reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) do set DESKTOP=%%D
V2 (スペースで動作) 4.10.2016:
for /f "usebackq tokens=1,2,*" %%B IN (`reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) do set DESKTOP=%%D
非 ASCII 記号がある場合は、ANSI エンコーディングを OEM に変換する必要もあります (例: キリル文字)。
CHCP 1251 >Nul
for /f "usebackq tokens=1,2,*" %%B IN (`reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) do set DESKTOP=%%D
CHCP 866 >Nul
for /f "delims=" %%i IN ('echo %DESKTOP%') do set DESKTOP=%%i
次に、次を使用します。
echo %DESKTOP%
答えを見つけた
Regedit /e /a dd.txt
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
find /i dd.txt "Desktop" >d.txt
For /F "tokens=2 delims==" %%a in (d.txt) do set mydesktop=%%a
これでもいいと思います
%systemdrive%\Documents and Settings\All Users\Desktop
よろしく
デスクトップ専用の最もクリーンなソリューション:
for /f "tokens=2*" %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do set DESKTOP=%%b
echo %DESKTOP%
tokens=Type (2)、残りのデータ (*) なので、場所の空白はトークン化されません。(スペースは許可されます)
ただし、存在しない可能性のあるレジストリ値を探している場合:
@echo off
set SUBKEY=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
set VALUE_NAME=Desktop
for /f "tokens=*" %%a in ('reg query "%SUBKEY%" /v "%VALUE_NAME%" 2^>nul') do set LINE=%%a
if defined LINE goto else
echo "%VALUE_NAME%" value not found.
goto end
:else
for /f "tokens=2,3 delims=#" %%a in ("%LINE: =#%") do (
echo Key: %SUBKEY%
echo Name: %VALUE_NAME%
echo Type: %%a
echo Data: %%b
)
:end
echo[
pause
tokens=*
4 つのスペースで区切られた行全体 (名前 + タイプ + データ) を取得します
%LINE: =#%
トークンを適切に区別できるように、4 つのスペースをハッシュタグに置き換えます
tokens=2,3
%%a
TypeとData のフィールドを取得します。%%b
あなたができるデータだけが欲しいならtokens=3
、それは%%a
. (唯一のトークンなので)
私がウェブ上で見てきたすべての例の中で、適切にトークン化できるように、行全体を収集して 4 つのスペースを交換している人を見たことがありません。それらはすべて、名前フィールドとデータフィールドの両方に存在する可能性のあるすべての空白で分割できます。もちろん、特定の値 (「デスクトップ」など) の直後にいる場合は、タイプが 2 番目のトークンになり、残りのデータ (*) が最後のトークンになることがわかります。「マイ ピクチャ」に 1 つのライナーが必要な場合は、token=3*
代わりに使用します。(「My」「Pictures」「Type」(3)「Data」(*))
また、2^>nul
値が存在しないかどうかを示す reg query コマンドを単純に防ぎます。
Environ("USERPROFILE") & "\デスクトップ"