web-dev-qa-db-ja.com

Windowsコマンドプロンプト-再配置されたユーザーのドキュメントフォルダーの取得

%userprofile%\Documentsディレクトリからいくつかのファイルをコピーする簡単なバッチスクリプトを記述しようとしています。自分のマシンでスクリプトをテストしていますが、いくつかの失敗の後で、ユーザーのデータを個別のパーティションに移動したことに気付きました。したがって、%userprofile%\Documentsであり、(明らかに)何もコピーされません。

私はすでに%homedrive%%homepath%などの他の環境変数を試しましたが、それでも標準のC:\...を指しています。

ユーザーのデータに使用されているactualドライブを見つける方法はありますか?

Windows 10を使用しています。

ありがとう!

[〜#〜]編集[〜#〜]

Ƭᴇcʜιᴇ007で指摘されているように、ユーザーのデータを別のパーティションに移動しませんでしたが、「メイン」フォルダー(ドキュメント、ビデオなど)を別のパーティションの対応するフォルダーに移動しました。 )ドキュメント、プロパティ、パス。

この方法で再配置されたドキュメントフォルダーのパスを確認するにはどうすればよいですか?

8
Alessandro

残念ながら、プロファイルからのデフォルトのパスからリダイレクトした場合、バッチスクリプトから確認できる単純な環境変数はありません。環境変数(ドキュメント化されていないものを含む)の完全なリストは、次の場所にあります。

http://ss64.com/nt/syntax-variables.html

もう1つ覚えておかなければならないのは、フォルダーリダイレクトでは、これらをネットワーク共有に移動することもできるということです。すべてを使用できる「ドライブ」である必要はありません。単にUNCパスである可能性があります。

良いニュースは、次の場所にあるレジストリで必要な情報を入手できることです。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal

その中に移動できるフォルダのセット全体がありますUser Shell Foldersキーですが、ここでWindowsバッチを使用してマイドキュメントフォルダーを読み取ると、次のようになります。

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal

私のマシンでは、これにより次の出力が生成されます。これは、必要なものと、Windowsバッチスクリプトの使い勝手によっては、多少役立つ場合があります。

 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders 
 Personal REG_EXPAND_SZ C:\ Users\joel\Documents 

Vbscriptを試すこともできます。

Set wshshell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")

またはPowershell:

[Environment]::GetFolderPath('MyDocuments')

これは最終的にはWindowsのbashからも(実際に!)利用できるようになるかもしれませんが、一貫して正確な方法でそれを行う方法はまだわかりません。

5
Joel Coehoorn

現在のフォルダーまたはコンピューター上の既知の拡張された場所への書き込みアクセス権があると仮定して... PowerShellを使用できます!

Environment.GetFolderPath関数は、Documentsフォルダーを含む well-known locations のファイルシステムパスを取得できます。次のPowerShellコマンドは、ドキュメントパスを出力します。

[Environment]::GetFolderPath('MyDocuments')

Out-Fileコマンドレットを使用してファイルに書き込むことができます。リダイレクトオペレーター>は、BOMを含むUnicodeテキストファイルを生成するため、ここでは実際には機能しません。これは、バッチプロセッサーでの作業が困難です。

[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii

そのファイルは set /p でバッチ変数に読み込むことができます。すべてをまとめると、次のバッチスクリプトフラグメントが得られます。

powershell -Command "[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii"
set /p DOCSPATH=< docspath.tmp
del docspath.tmp

ユーザーのドキュメントフォルダーへのパスを%DOCSPATH%で表すことができるようになりました。

3
Ben N

確かな答えがあります。 dosへの答えを返すPowerShellの組み合わせ

for /f "delims=" %%a in ('powershell.exe -command "& {write-Host $([Environment]::GetFolderPath('MyDocuments'))}"') do Set "$Value=%%a"
Echo Value received from Powershell : %$Value%
1
dcshoecomp

まあそれはかなり簡単です:)

デスクトップフォルダの場所は次のとおりです。

\ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

またはPowerShellでさらに簡単

$ DesktopPath = [環境] :: GetFolderPath( "デスクトップ")

0
integratorIT