17

バッチファイルの同じパスの下にあるフォルダーとファイルをデスクトップにコピーする単純なバッチファイルを実行しています。を使用して、バッチファイルが配置されているパスを簡単に取得できます

%~dp0

しかし、私はユーザーのデスクトップのパスを取得する方法を知りたいです (私は Widows 7 Ultimate を使用しています)

助言がありますか?

4

9 に答える 9

21

デスクトップの場所が別のフォルダーにある場合のみ、これが正解になります。

バッチ文字列:

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%
于 2016-01-10T13:51:56.620 に答える
3

答えを見つけた

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
于 2013-09-05T07:15:19.957 に答える
2

これでもいいと思います

%systemdrive%\Documents and Settings\All Users\Desktop

よろしく

于 2013-09-05T07:33:22.260 に答える
1

デスクトップ専用の最もクリーンなソリューション:

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%%aTypeとData のフィールドを取得します。%%b

あなたができるデータだけが欲しいならtokens=3、それは%%a. (唯一のトークンなので)

私がウェブ上で見てきたすべての例の中で、適切にトークン化できるように、行全体を収集して 4 つのスペースを交換している人を見たことがありません。それらはすべて、名前フィールドとデータフィールドの両方に存在する可能性のあるすべての空白で分割できます。もちろん、特定の値 (「デスクトップ」など) の直後にいる場合は、タイプが 2 番目のトークンになり、残りのデータ (*) が最後のトークンになることがわかります。「マイ ピクチャ」に 1 つのライナーが必要な場合は、token=3*代わりに使用します。(「My」「Pictures」「Type」(3)「Data」(*))

また、2^>nul値が存在しないかどうかを示す reg query コマンドを単純に防ぎます。

于 2022-01-04T02:28:40.437 に答える
-1

Environ("USERPROFILE") & "\デスクトップ"

于 2016-06-06T18:06:13.197 に答える