%userprofile%\Documents
ディレクトリからいくつかのファイルをコピーする簡単なバッチスクリプトを記述しようとしています。自分のマシンでスクリプトをテストしていますが、いくつかの失敗の後で、ユーザーのデータを個別のパーティションに移動したことに気付きました。したがって、%userprofile%\Documents
は空であり、(明らかに)何もコピーされません。
私はすでに%homedrive%
や%homepath%
などの他の環境変数を試しましたが、それでも標準のC:\...
を指しています。
ユーザーのデータに使用されているactualドライブを見つける方法はありますか?
Windows 10を使用しています。
ありがとう!
[〜#〜]編集[〜#〜]
Ƭᴇcʜιᴇ007で指摘されているように、ユーザーのデータを別のパーティションに移動しませんでしたが、「メイン」フォルダー(ドキュメント、ビデオなど)を別のパーティションの対応するフォルダーに移動しました。 )ドキュメント、プロパティ、パス。
この方法で再配置されたドキュメントフォルダーのパスを確認するにはどうすればよいですか?
残念ながら、プロファイルからのデフォルトのパスからリダイレクトした場合、バッチスクリプトから確認できる単純な環境変数はありません。環境変数(ドキュメント化されていないものを含む)の完全なリストは、次の場所にあります。
もう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からも(実際に!)利用できるようになるかもしれませんが、一貫して正確な方法でそれを行う方法はまだわかりません。
現在のフォルダーまたはコンピューター上の既知の拡張された場所への書き込みアクセス権があると仮定して... 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%
で表すことができるようになりました。
確かな答えがあります。 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%
まあそれはかなり簡単です:)
デスクトップフォルダの場所は次のとおりです。
\ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
またはPowerShellでさらに簡単
$ DesktopPath = [環境] :: GetFolderPath( "デスクトップ")