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
)
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
)
Please also mark the comments that contributed to the solution of the article
Content-Key: 329051
Url: https://administrator.de/contentid/329051
Printed on: May 4, 2024 at 15:05 o'clock
2 Comments
Latest comment
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
Entweder Du benutzt die verzögerte Variablenerweiterung oder Du lagerst Deinen Code in ein Unterprogramm aus (z.B.
Skizze:
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
Grüße
Friemler
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