Batch Dateipfad finden und in Variable speichern

sys.ko

Cadet 3rd Year
Registriert
Aug. 2013
Beiträge
35
Hallo, ich suche den Befehl in der Konsole, womit sich die Batch den aktuellen Pfad zu einem Zielverzeichnis raussucht und in einer Variable speichert, sodass man zum Ziel später Dateien kopieren kann.
Ich habe gedacht nimmst du mal eben schnell FOR und schreibst das.
Eigentlich simpel, aber irgendwie kriege ich es nicht mehr hin. :freak:

Hier mal eben das einfachste Beispiel mit dem Austausch zweier Dateien von Java (mein letzter Versuch):
Code:
@echo off

FOR /R "C:\Program Files (x86)\Java\jre1.*.*_*\lib\security" %%V IN (.) DO set "var=%%V"  //* als Platzhalter

set quelle1=\\Server\Ordner1\Ordner2\Java\cacerts
set ziel1="C:\Program Files (x86)\Java\%%V\lib\security"

set quelle2=\\Server\Ordner1\Ordner2\Java\DeploymentRuleSet.jar
set ziel2=C:\Windows\Sun\Java\Deployment

IF EXIST "C:\Program Files (x86)\Java\jre1.*.*_*\lib\security" (goto copy1) else (goto speak1)

IF EXIST "C:\Windows\Sun\Java\Deployment" (goto copy2) else (goto speak2)


:copy1
xcopy /y %quelle1% %ziel1% 

:copy2
copy /y %quelle2% %ziel2%


:speak1
echo Die cacters Datei konnte nicht kopiert werden. Der Ordner wurde nicht gefunden. Bitte Ueberpruefen Sie ob Java installiert ist.
echo\

:speak2
echo Die DeploymentRuleSet Datei konnte nicht kopiert werden. Der Ordner wurde nicht gefunden. Bitte Ueberpruefen Sie ob Java installiert ist.
echo\


timeout /T 5 /nobreak

V= die Variable für "Verzeichnis"
Da sich bei Java immer die Version ändert müssen wir bei jedem PC die beiden Dateien immer wieder kopieren.
Bei knapp 1500 Rechner wird das lästig bisher habe ich immer die Versionen manuell eingetragen...
Die DeploymentRuleSet.jar kopiert er, aber nicht die cacerts.

Ich danke euch für jede Hilfe und Tipp! :)

P.S. Soll später auch als Vorlage für anderen Programme verwendet werden.
 
So evtl?
Code:
for /d %%V in ("%ProgramFiles(x86)%\Java\jre1.*.*_*\lib\security") do set "ziel1=%%~V"

Wobei er den Pfad so natürlich nur für die höchste JRE-Version verwendet, bzw. die letzte Ausgabe der FOR-Schleife. Aber das ist vermutlich Sinn der Sache...


PS: Da musste ich ich ja schon ein wenig schmunzeln:
set ziel1="C:\Program Files (x86)\Java\%%V\lib\security"

;)
 
Zuletzt bearbeitet von einem Moderator:
Funktioniert leider nicht. :(
Er kopiert nur die DeploymentRuleSet, aber leider nicht die cacerts.

--
@echo off

for /d %%V in ("%Program Files (x86)%\Java\jre1.*.*_*\lib\security") do set "ziel1=%%~V"

set quelle1=\\backup\Install\Anwendungen\Java\cacerts
set ziel1="%%~V"

set quelle2=\\backup\Install\Anwendungen\Java\DeploymentRuleSet.jar
set ziel2=C:\Windows\Sun\Java\Deployment

IF EXIST "%ziel1%" goto copy1

IF EXIST "C:\Windows\Sun\Java\Deployment" goto copy2


:copy1
xcopy /y %quelle1% %ziel1%

:copy2
copy /y %quelle2% %ziel2%


timeout /T 5 /nobreak
--
 
Da das Schmunzeln dir scheinbar keinen Hinweis gegeben hat, frage ich mal direkt: Aus welchem Grund überschreibst die mit der Schleife gesetzte Pfad-Variable, zwei Zeilen später wieder mit Kauderwelsch?

Die Zeile set ziel1="%%~V" ist Unsinn.
Du kannst die probehalber ersetzen mit: echo %ziel1% & pause
Dann siehst du ob es mit der gesetzten Variable hinhaut, bevor der Kopierbefehl durch Drücken einer beliebigen Taste ausgeführt wird.


*Update
Ich sehe grade... die System-Variable %ProgramFiles(x86)% aus meiner Beispielschleife hast du scheinbar auch mal eben um ein Paar Leerzeichen erweitert... falls du dich dann wunderst, dass es auch unter Einbezug des obrigen Hinweises nicht funktioniert, weißt du dann bescheid. :rolleyes:
Viel Erfolg noch...
 
Zuletzt bearbeitet von einem Moderator:
Habe aus versehen die falsche Datei kopiert. Also die Leerzeichen zwischen %ProgramFiles(x86)% gibt es in der originalen Datei nicht, nur in der von mir "zerlegten". Das selbe mit ziel1="%%~V" in der die ich nur ausführe gibt es die Zeile nicht.
Jetzt mal der originale den ich eigentlich die ganze Zeit ausführe, mit dem echo %ziel1% & pause

--
for /d %%V in ("%ProgramFiles(x86)%\Java\jre1.*.*_*\lib\security") do set "ziel1=%%~V"

echo %ziel1% & pause

set quelle1=\\backup\Install\Anwendungen\Java\cacerts

set quelle2=\\backup\Install\Anwendungen\Java\DeploymentRuleSet.jar
set ziel2=C:\Windows\Sun\Java\Deployment
...--> hat sich nichts geändert
--

Durch das Echo gibt er mir die for schleife aus --> for / %V in ("C:\Program Files (x86)%\Java\jre1.*.*_*\lib\security") do set "ziel1=%%~V"
Sprich er ersetzt noch nicht die * durch die Nummern der Version. Frage geht das überhaupt mitten im Pfad oder muss man die kompletten aktuellen Ordner suchen lassen?
for /d %%V in ("%ProgramFiles(x86)%\Java\*\lib\security") do set "ziel1=%%~V"


Edit: Mein letzter Vorschlag ohne jre funktioniert nicht.
Dein PS am Anfang habe ich gestern wahrscheinlich einfach nur schnell überlesen #SoEineKleineSchrift :D, im nachhinein macht es keinen Sinn den Pfad anzugeben und im Pfad nochmal den Pfad anzugeben SORRY :freaky: Dank dir für die bisherigen Antworten
 
Zuletzt bearbeitet:
Wird wohl wegen der Pfadangabe nach den Platzhaltern sein... sprich, nach '%ProgramFiles(x86)%\Java\jre1.*.*_*' weiter machen, mag er nicht. Sollte aber eigentlich auch nicht nötig sein. Ich habe dir das ungetesteter Weise mal zusammenkopiert, wie dass wohl bei mir etwa aussehen würde:

Code:
@echo off

  set quelle1="\\Server\Ordner1\Ordner2\Java\cacerts"
  for /d %%V in ("%ProgramFiles(x86)%\Java\jre1.*.*_*") do set "ziel1=%%~V"

  set quelle2="\\Server\Ordner1\Ordner2\Java\DeploymentRuleSet.jar"
  set ziel2="C:\Windows\Sun\Java\Deployment"


if exist "%ziel1%\lib\security" (xcopy /y %quelle1% "%ziel1%\lib\security" ) else (call :ERROR CAcert)
if exist %ziel2% (copy /y %quelle2% %ziel2%) else (call :ERROR DeploymentRuleSet)


echo.
echo ...fertig!
timeout /t 5 /nobreak >nul & exit

:ERROR
echo.
echo  Die '%1' Datei konnte nicht kopiert werden. Der Ordner wurde nicht gefunden.
echo  Bitte Ueberpruefen Sie ob Java installiert ist.
exit /b
Dass die ziel1-Variable bei dir mit dem Befehl aus der Schleife beschrieben wird, ist für mich jedoch nicht nachvollziehbar. Eigentlich hätte eine Fehlermeldung bezüglich falscher Syntax drin sein müssen. Naja... viel Glück damit.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben