私は%USERPROFILE%
Windows上のシステム定義環境変数XP(およびVistaおよびWindows 7)。「マイドキュメント」ディレクトリの場所を指すシステム定義環境変数はありますか?On XPデフォルトでは%USERPROFILE%\My Documents
およびWin 7では%USERPROFILE%\Documents
。回避できる場合は、PowershellスクリプトでOSバージョンをテストする必要がないようにしたかっただけです。
デフォルトのインストールXPシステムには、そのための環境変数はありません。コマンドラインで「set」コマンド(パラメーターなし)を使用すると、すべての変数をリストできます。したがって、おそらくテストを行う必要があります。
OSバージョンをテストしたくない場合は、「ドキュメント」が存在するかどうかを確認し、存在しない場合は「マイドキュメント」を試すか、その逆を行います。ただし、s/oはXPマシンに「Documents」フォルダーを持つことができるため、これは完全ではありません。
ところで:私のシステムはドイツ語なので、フォルダは "Dokumente"と呼ばれます。それを考慮する必要があるかもしれません。
そのフォルダへのパスはに保存されます
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Personal
の下。ただし、レジストリへのアクセスが必要です。
ソース: Microsoft
PowerShellの場合、次のように機能します。
_[environment]::getfolderpath("mydocuments")
_
魔法の糸を避ける
_[Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments)
_
.NETの場合、以下が当てはまります(つまり、all Windowsアプリケーションには適用されません)。
1つの答えが指摘しているように、マイドキュメントを指す環境変数はありませんが、.NETにはEnvironment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
(C#)があります。
この質問を追加するのは、C#、環境変数、およびドキュメントをグーグルで検索するときにこの質問が出てきて、ジャスティンの答えにtheコード行が含まれていないからです:)
上記のコード行を使用することは、.NETのドキュメントにアクセスする好ましい方法です:)
C#で使用するために、この行をコピーして貼り付けます。
_var directoryNameOfMyDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
_
C#はMyDocumentsで大文字のDを必要とすることに注意してください。
組み込みの環境変数はありませんが、PowerShellでは次の方法で場所を見つけることができます。
[Environment]::GetFolderPath("mydocuments")
また、明らかに環境変数を作成できます:
$env:DOCUMENTS = [Environment]::GetFolderPath("mydocuments")
(前の回答を繰り返しますが)「My Documents」ディレクトリには、すぐに使用できる環境変数(WinXP)はありません。
ただし、次のコマンドを使用して変数を設定できます。
for /f "tokens=3* delims= " %a ^
in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') ^
do (set mydocuments=%a %b)
または(1ライナー)
for /f "tokens=3* delims= " %a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set mydocuments=%a %b)
すると、_%mydocuments%
変数:
C:\>echo mydocuments="%mydocuments%"
mydocuments="C:\pathto\My Documents"
(XP/Vistaを使用している人はいますか?はいの場合、これをテストして、動作するかどうかをお知らせください。)
入力した場合:
set
コマンドプロンプトで、システムで定義されているすべての環境変数のリストを取得します。
私のもの(Windows 7 Home Premium)で定義されているものを見ると、どれもマイドキュメントを指しているようには見えません。
参考までに:
SHGetSpecialFolderPath 関数を使用して、マイドキュメントディレクトリへのパスを取得できます。または、 Environment.GetFolderPath メソッドを.Netで使用できます。
C:\Documents and Settings\mrabinovitch>set | grep -i document
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\myuser\Application Data
HOMEPATH=\Documents and Settings\myuser
USERPROFILE=C:\Documents and Settings\myuser
ご覧のとおり、そのような変数はありません。
レジストリ 、 。NET および PowerShell に基づく回答に加えて、 WshSpecialFolders
を使用することもできます= from [〜#〜] wsh [〜#〜] 。以下に、自己完結型コマンド/バッチスクリプトを示します。
@echo off
call :script > "%temp%\%~n0.js" && cscript //nologo "%temp%\%~n0.js" %*
goto :EOF
:script
echo var specialFolders = WScript.CreateObject('WScript.Shell').SpecialFolders;
echo if (WScript.Arguments.length === 0) {
echo for (var e = new Enumerator(specialFolders); !e.atEnd(); e.moveNext()) {
echo WScript.Echo(e.item());
echo }
echo } else {
echo for (var e = new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) {
echo WScript.Echo(specialFolders(e.item()));
echo }
echo }
goto :EOF
JScriptでWSHスクリプトを発行し、それを使用して、引数として提供される特別なフォルダートークンの1つ以上のパスを取得します。上記のスクリプトをspecialf.cmd
というファイルとして保存すると仮定すると、現在のユーザーのドキュメントディレクトリへのパスを取得するための使用法は次のようになります。
specialf MyDocuments
すべての特別なフォルダートークンをテストする別の使用法を次に示します。
specialf ^
AllUsersDesktop ^
AllUsersStartMenu ^
AllUsersPrograms ^
AllUsersStartup ^
Desktop ^
Favorites ^
Fonts ^
MyDocuments ^
NetHood ^
PrintHood ^
Programs ^
Recent ^
SendTo ^
StartMenu ^
Startup ^
Templates
これを使用して、次のような環境変数にキャプチャできます。
for /f "delims=/" %p in ('specialf MyDocuments') do @set MYDOCS=%p
混乱は、CSIDL/KNOWNFOLDERID値とコマンドシェル環境変数の可用性に起因する場合があります。
@NickGrealyの回答の改善:
reg query
出力empty_line reg_key_path name type value
%a %b
文字列は正しくありませんしたがって、skip=2
オプションを使用して最初の行をスキップし、tokens=2*
オプションを使用してレジストリ値を%b
変数に渡します。
for /f "skip=2 tokens=2*" %A in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "UserDocs=%B"
またはスクリプトファイルの場合:
for /f "skip=2 tokens=2*" %%A in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do set "UserDocs=%%B"
ただし、レジストリ値[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\!Do not use this registry key]
を考慮する
@AtifAzizの回答に基づく:
for /f "tokens=*" %A in ('echo WScript.Echo^(^(new ActiveXObject^("WScript.Shell"^)^).SpecialFolders^("MyDocuments"^)^)^>%TEMP%\getdoc.js ^& cscript /nologo %TEMP%\getdoc.js ^& del /q %TEMP%\getdoc.js') do @set "UserDocs=%A"
(少なくとも)Windows 7のバッチファイルの場合、Nick Gのソリューションでは、ユーザー定義変数UserDocumentsを設定するための微調整が必要です。
FOR /F "tokens=3* delims= " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set UserDocuments=%%a)
唯一の違いは、
行を表示せずに、結果を表示するには、次を使用します。
@FOR /F "tokens=3* delims= " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @(Set UserDocuments=%%a)
@Echo ~~~~~~~~ UserDocuments=%UserDocuments%
ニックGに感謝します。あなたの答えは私に多くを教えてくれました。これが他の人の助けになることを願っています。
勝利XP、Vista、8、8.1、10でテストおよび動作中!!
@echo off
for /f "skip=2 tokens=2*" %%c in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "docs=%%d" && echo WIN XP - 10
xcopy "C:\test.txt" "%docs%" /f /y
echo %docs%
pause
EXIT
設計上、Windowsのドキュメント環境変数は存在しません。カスタマイズしたものを作成する必要があります。 here に移動してこれを行います。 MYDOCUMENTSという環境変数を定義して、参照する必要のある場所を参照します。それ以降は、%MYDOCUMENTS%で参照する環境変数になります。
windowsバッチファイル(.bat)またはWindowsコマンドスクリプト(.cmd)を更新する
@echo off
ver | find "XP" > nul
if %ERRORLEVEL% == 0 SET DOCS=%USERPROFILE%\My Documents & echo WIN XP
if %ERRORLEVEL% == 1 FOR /f "tokens=3" %%x IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set docs=%%x) & echo WIN Vista - 10
xcopy "C:\test.txt" "%docs%" /f /y
echo %docs%
pause
EXIT
以下は、Windowsを実行しているすべてのユーザーのユーザー変数の完全なリストです。
コードのregクエリ部分はその値を見つけて設定し、すぐに使用できるようにし、他のコードがすべてのユーザーに対して永続的に設定できるようにします。コードの広告レジストリ部分は、すべてのユーザーに対して有効にします。 setxにより、コードを使用するためにログオフしてログインし直す必要がなくなります。
現在のユーザー変数は、このコードをインストールした人にのみ適用されます。
@ECHO OFF
ECHO REG ALL USER variables
ECHO all user desktop
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Desktop"') do @set "ALLDT=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLDT" /t "REG_SZ" /d "%ALLDT%" /f
setx ALLDT "%ALLDT%"
Echo all user's documents
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Documents"') do @set "ALLDOC=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLDOC" /t "REG_SZ" /d "%ALLDOC%" /f
setx ALLDOC "%ALLDOC%"
echo all user start menu
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Programs"') do @set "ALLSM=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLSM" /t "REG_SZ" /d "%ALLSM%" /f
setx ALLSM "%ALLSM%"
Echo all users startup
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Startup"') do @set "ALLSMSTU=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLSMSTU" /t "REG_SZ" /d "%ALLSMSTU%" /f
setx ALLSMSTU "%ALLSMSTU%"
Echo all users music
for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonMusic"') do @set "ALLMU=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLMU" /t "REG_SZ" /d "%ALLMU%" /f
setx ALLMU "%ALLMU%"
echo all users pictures
for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonPictures"') do @set "ALLPIC=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLPIC" /t "REG_SZ" /d "%ALLPIC%" /f
setx ALLPIC "%ALLPIC%"
Echo all users videos
for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonVideo"') do @set "ALLVID=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLVID" /t "REG_SZ" /d "%ALLVID%" /f
setx ALLVID "%ALLVID%"
Echo set cerrent user variables
Echo current users desktop
for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"') do @set "myDesktop=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myDesktop" /t "REG_SZ" /d "%myDesktop%" /f
setx myDesktop "%myDesktop%"
Echo current users documents
for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "mydoc=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "mydoc" /t "REG_SZ" /d "%mydoc%" /f
setx mydoc "%mydoc%"
Echo current user start menu
for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Start Menu"') do @set "myStart=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myStart" /t "REG_SZ" /d "%myStart%" /f
setx myStart "%myStart%"
Echo current user startup
for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Startup"') do @set "myStartup=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myStartup" /t "REG_SZ" /d "%myStartup%" /f
setx myStartup "%myStartup%"
Echo current users music
for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music"') do @set "myMU=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myMU" /t "REG_SZ" /d "%myMU%" /f
setx myMU "%myMU%"
Echo current users pictures
for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Pictures"') do @set "myPIC=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myPIC" /t "REG_SZ" /d "%myPIC%" /f
setx myPIC "%myPIC%"
Echo current users video
for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Video"') do @set "myVID=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myVID" /t "REG_SZ" /d "%myVID%" /f
setx myVID "%myVID%"
exit
Windowsバッチファイル(.bat)またはWindowsコマンドスクリプト(.cmd)
@echo off
ver | find "XP" > nul
if %ERRORLEVEL% == 0 set Docs=%UserProfile%\My Documents & echo WIN XP
if %ERRORLEVEL% == 1 set Docs=%UserProfile%\Documents & echo WIN Vista - 10
xcopy "C:\test.txt" "%Docs%" /f /y
pause
EXIT