2017-10-17 4 views
0

私はユーザごとにローカルで行うユーザ設定を自動化しようとしています。なぜ私はバッチファイルでそれをやっているのですか?これの一部として、ドキュメントフォルダをUドライブとしてマップされているものにリダイレクトする必要があります。 My DocumentsフォルダがUドライブに存在する場合、そこに移動する必要があります。移動しない場合は、Uドライブのルートにマップする必要があります。マップされたネットワークドライブバッチファイルへのローカルフォルダリダイレクト

以下のコードは私が現在持っているものですが、私がチェックしているフォルダを持っていても、常にElse状態になっています。

誰かが助けてくれる場合は、どうかしてください。

@echo off 
cd\ & cls 
set UDRIVE="u:\My Documents\" 
If exist %udrive% (set newDocuments=%udrive%) Else (set newDocuments=U:\) 

set registryPath1="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" 
set registryPath2="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" 

>null reg add %registryPath1% /v "Personal" /t REG_SZ /d %newDocuments% /f 
>null reg add %registryPath2% /v "Personal" /t REG_EXPAND_SZ /d %newDocuments% /f 
>null reg add %registryPath2% /v "{F42EE2D3-909F-4907-8871-4C22FC0BF756}" /t REG_EXPAND_SZ /d %newDocuments% /f 
echo Redirection completed. 



%echo% 
Pause 
%echo% 
+0

「IFあり」%udrive%\ "(GOTO:FolderRedirect)ELSE GOTO:FolderRedirect2'を使用してください。基本的な説明は 'if /? 'を読んでください。 – JosefZ

+0

まだElse条件にデフォルト設定されています。ターゲットフォルダが存在するかどうかにかかわらず、Else条件にデフォルト設定されています。 – LaneDutch

+0

':FolderRedirect2'ラベルの直前に' goto:somewhere'を挿入してください。 – JosefZ

答えて

1

は(this Squashman's commentを参照してください)、変数に引用符を割り当てないでください:set "varname=varvalue"ベスト・プラクティスは、このようなあなたの変数を割り当てることです。これは特殊文字とスペースを保持するのに役立ちますが、変数には引用符を割り当てません。その後、次のようにルールの上に明示的に"%varname%"

のように二重引用符を使用してそれらを参照するには、あなたのコードスニペットに適用される:

@echo off 
cd\ & cls 
set "UDRIVE=u:\My Documents\" 
If exist "%udrive%" (set "newDocuments=%udrive%") Else (set "newDocuments=U:\") 

set "registryPath1=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" 
set "registryPath2=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" 

>null reg add "%registryPath1%" /v "Personal" /t REG_SZ /d "%newDocuments%\" /f 
>null reg add "%registryPath2%" /v "Personal" /t REG_EXPAND_SZ /d "%newDocuments%\" /f 
>null reg add "%registryPath2%" /v "{F42EE2D3-909F-4907-8871-4C22FC0BF756}" /t REG_EXPAND_SZ /d "%newDocuments%\" /f 
echo Redirection completed. 

ご注意:バックスラッシュ文字を

REGコマンドを解釈します の直後にある文字のエスケープとして\を入力します。データに引用符(")を含めるには、 の前にエスケープ文字を付けます。ここは\"です。
\"( )にあるため、引用符で囲まれたディレクトリパスに問題が発生する可能性があります。行末がエスケープされます。
を末尾の円記号(\)で保存するには、 に「エスケープ」エスケープを追加する必要があります。たとえば、「C:\ My Docs」ではなく「C:\ My」を使用します。

+0

あなたのところにいきました。しかし、それをU:\ My Documents \ Imにリダイレクトしようとするとまだぶら下がっています。追加する前にキーを削除する必要があるのでしょうか?正直言って、すべてのアイデアから。 – LaneDutch

+0

UDRIVEのパスからスペースを取り除くと、他のすべてのものと同じように機能します。どのように私はそれをスペースで動作させることができますか? – LaneDutch

+0

更新された回答(注:バックスラッシュ文字)をご覧ください。 'reg query" HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Explorer¥Shell Folders "(および' User Shell Folders ')もチェックしてください。 – JosefZ

関連する問題