2017-10-17 1 views
0

Im Versuch, unsere Benutzerkonfiguration zu automatisieren, die wir lokal pro Benutzer tun, weshalb ich es durch eine Batch-Datei mache. Als Teil davon muss ich ihren Dokumentenordner zu dem umleiten, was als ihr U-Laufwerk zugeordnet ist. Wenn ein Ordner "Eigene Dateien" in ihrem U-Laufwerk vorhanden ist, muss ich dorthin gehen. Andernfalls muss ich sie dem Stammverzeichnis ihres U-Laufwerks zuordnen.Lokale Ordnerumleitung auf Batchdatei des zugeordneten Netzlaufwerks

Der Code unten ist, was ich derzeit habe, aber es ist immer die Else-Bedingung, auch wenn ich den Ordner habe, nach dem ich suche.

Wenn jemand helfen könnte, bitte tun.

@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

Verwenden Sie 'IF existieren"% udrive% \ "(GOTO: FolderRedirect) ELSE GOTO: FolderRedirect2'. Lesen Sie 'if /?' Für grundlegende Erklärungen. – JosefZ

+0

Es ist immer noch die Else-Bedingung. Unabhängig davon, ob der Zielordner vorhanden ist, wird immer noch die Else-Bedingung verwendet. – LaneDutch

+0

Fügen Sie 'goto: somewhere' kurz vor dem': FolderRedirect2' Label ein. – JosefZ

Antwort

1

Weisen Sie Zitate auf Ihre Variablen (siehe this Squashman's comment): Best Practice ist Ihre Variablen wie folgt vergeben: set "varname=varvalue". Dies hilft dabei, Sonderzeichen und Leerzeichen beizubehalten, weist Ihrer Variablen jedoch keine Anführungszeichen zu. Dann finden Sie sie explizit doppelten Anführungszeichen wie "%varname%"

Above Regel Ihr Code-Snippet wie folgt angewandt:

@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. 

Bitte beachten Sie: Aufkantung Zeichen

Der REG Befehl interpretiert \ als Escape für das Zeichen, das sofort folgt . Um ein Anführungszeichen (") in die Daten einzuschließen, geben Sie ihm das Escape-Zeichen, z. Hier ist \" ein Zitat.
Dies kann zu Problemen mit Verzeichnispfaden in Anführungszeichen führen, da \" um das Ende der Zeile mit Escapezeichen versehen wird.
Um einen Verzeichnispfad mit einem abschließenden Backslash (\) zu speichern, müssen Sie einen zweiten Backslash zu 'escape' die Escape-Anweisung hinzufügen, also zum Beispiel anstelle von "C: \ My Docs \" verwenden "C: \ My Docs \".

+0

Okay, ich bin mit dir da, aber es hängt immer noch, wenn es versucht, es zu U: \ My Documents \ Ich frage mich, ob ich die Schlüssel löschen müssen, bevor Sie sie ?? Um ehrlich zu sein, alles aus Ideen. – LaneDutch

+0

Wenn ich den Raum aus dem UDRIVE-Pfad nehme, funktioniert es einfach alles andere gleich. Wie kann ich mit dem Raum arbeiten? – LaneDutch

+0

Bitte beachten Sie die aktualisierte Antwort (Hinweis: Backslash-Zeichen). Überprüfen Sie 'reg-Abfrage" HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell-Ordner "' (und 'User Shell Folders' auch). – JosefZ

Verwandte Themen