rusdav
Goto Top

Verlinkung erstellen Batch Datei mit for Schleife

Hallo,
ich möchte aus einer CSV Datei Ordner und eine Verlinkung auf den zu erstellenden Ordner erstellen.

Dazu habe ich folgenden Code geschrieben.
Der erste Teil mit der Anlage der Ordner und Unterordner funktioneirt problemlos. Beim erstellen der Verlinkung geht es aber nicht.
Wenn ich für die Verlinkung eine einzelne Batch machen, funktioneirt es.

Wer kann helfen?


:: Anlage einer Liste aus Excel, mit Schleife und Adressnummer_Name

For /F "tokens=1-2* delims=;" %%i in (Test.csv) do (
@echo "%i;%j"
MD %%j_%%i
MD %%j_%%i\01_Bilder
MD %%j_%%i\02_Prospekte
MD %%j_%%i\03_Datenblaetter
MD %%j_%%i\04_Bedienungsanleitung
MD %%j_%%i\05_Video


::Start Verknüpfung
@echo off & setlocal

::Speicherort der Verknüpfung
set "zielpfad=D:\Entwicklung_Loesungen\Ordner Erstellung\%%j_%%i"

::Falls das Symbol auf den Desktop soll:
::set ""zielpfad=%userprofile%\Desktop""

::Name der Verknüpfung (ohne "".lnk"")

set "progtitel=Link_%%j_%%i"

::Speicherort der Programmdatei wird auch für ""Ausführen in:"" verwendet
set "progdir=C:\Windows"
set "progexe=explorer.exe"

::Kommentar
set "beschreibung=Link"

:: Zielpfad
set "pfad=D:\Entwicklung_Loesungen\Ordner Erstellung\%%j_%%i"

::Bei Bedarf Speicherordner der Verknüpfung erstellen (siehe oben ""zielpfad""):
::if not exist "%zielpfad%" md "%zielpfad%"

::temporäres VBScript erzeugen ...
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs
echo objShortcut.TargetPath="%pfad%">>%temp%\MakeShortCut.vbs
echo objShortcut.Description="%beschreibung%">>%temp%\MakeShortCut.vbs
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs
echo objShortcut.Save>>%temp%\MakeShortCut.vbs

::... ausführen ...
cscript //nologo %temp%\MakeShortCut.vbs

::... und wieder löschen.
del %temp%\MakeShortCut.vbs
)

Content-Key: 329051

Url: https://administrator.de/contentid/329051

Ausgedruckt am: 19.03.2024 um 01:03 Uhr

Mitglied: Friemler
Lösung Friemler 12.02.2017 aktualisiert um 10:16:19 Uhr
Goto Top
Hallo rusdav,

zunächst mal: Hier im Forum kann man Quellcode in Code-Tags einschließen, damit er besser lesbar ist. Wie das geht steht hier.

Zu Deinem Problem: Dein Code läuft innerhalb einer FOR-Schleife und Du benutzt keine verzögerte Variablenerweiterung (siehe auch mein Tutorial zur FOR-Schleife). Dadurch haben Deine Variablen zum Zeitpunkt der Ausführung der enthaltenden Quellcodezeile nicht den richtigen Wert.

Entweder Du benutzt die verzögerte Variablenerweiterung oder Du lagerst Deinen Code in ein Unterprogramm aus (z.B. ProcessPath) und rufst dieses aus der FOR-Schleife heraus auf (mit CALL :ProcessPath).

Skizze:
for /f "usebackq tokens=1-2 delims=;" %%i in ("Test.csv") do (  
  call :ProcessPath "%%~i" "%%~j"  
)

exit /b 0


:ProcessPath
  ::Dein bisheriger Code
  ::Die Variable %%i aus dem Hauptprogramm kannst Du als %~1 ansprechen,
  ::%%j aus dem Hauptprogramm als %~2
exit /b


Achtung! Wenn die CSV-Datei Pfade mit deutschen Umlauten enthält, wird der Code auf einem deutschen Windows so nicht funktionieren, falls die CSV-Datei nicht in der Zeichencodierung OEM-850 gespeichert ist. Du musst dann noch an der richtigen Stelle mit CHCP die Codepage/Zeichencodierung umschalten.

Grüße
Friemler
Mitglied: rusdav
rusdav 16.02.2017 um 08:59:52 Uhr
Goto Top
Hallo und Guten Morgen,

vielen Dank für die beiden Tipps und sorry für die etwas verspätete Antwort.

Ich war die letzten Tage nicht im Büro und werde deinen Vorschlag dann gleich probieren!

Danke!