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


8

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

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

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

Windows 10を使用しています。

ありがとう!

編集

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

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


2
%userprofile%には、プロファイルフォルダーを正しく再配置する限り、どこに置いても正しいフォルダーが必要です。では、それを他のパーティションにどのように正確に移動しましたか?
Ƭᴇcʜιᴇ007

わかりました、正直覚えていなかったので、少し閲覧して、やっと自分のやっていることがわかりました。「メイン」フォルダ(ドキュメント、ビデオなど)を右クリックし、[プロパティ]を選択して、[パス]タブを選択し、パスを変更しました。(私はイタリア語版のWindowsを使用しており、画面に表示される名前をほとんど翻訳していないため、一部の単語が異なる場合があります)。だからあなたは正しかった、%userprofile%は実際には何も悪いことをしていない。しかし、問題はまだ残っています。「メイン」のDocumentsフォルダーの実際のパスを見つけるにはどうすればよいですか
アレッサンドロ

次に、ドキュメントの「ライブラリ」を、ユーザープロファイルパスのDocumentsフォルダーと混同していると思います。二つの異なるもの...
Ƭᴇcʜιᴇ007

この方法で再配置されたことを考慮して、Documentsフォルダーのパスを確認する方法はありますか?
アレッサンドロ

回答:


5

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

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
    個人のREG_EXPAND_SZ C:\ Users \ joel \ Documents

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

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

またはPowershell:

[Environment]::GetFolderPath('MyDocuments')

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


3

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

このEnvironment.GetFolderPath関数は、ドキュメントフォルダーを含む、よく知られた場所のファイルシステムパスを取得できます。次の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

ユーザーのDocumentsフォルダーへのパスは、次のように表すことができます%DOCSPATH%


1

確かな答えがあります。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%

$CMD変数名でaを使用できることを知りませんでした。しかし、それは珍しい用法であることを知っていますよね?
スコット

0

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

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

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

またはPowerShellでさらに簡単

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.