sinep1337
Goto Top

.bat-datei, die .bat-dateien erstellt, die wiederum Namen und Inhalte aus einer Excel-Tabelle bekommen sollen

Hallo zusammen, ich hoffe, ihr könnt mir weiterhelfen.

Ich habe folgendes Problem:

ich benötige eine batch-datei, die mir weitere batch-dateien erstellt. das hab ich soweit:

@echo off

set i=Haltung_100001
:START
echo text > %i%.bat
set /A i=i+1
IF %i%==10 (exit)
goto :START


jetzt sollen die dann erstellten bat-dateien aber bestimmte datei-namen und inhalte bekommen. diese habe ich in einer excel-tabelle.

kann mir jmd evtl. weiterhelfen? ich wäre über jeden tipp sehr froh.
danke im voraus (;


Gruß, sinep1337

Content-Key: 169282

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

Printed on: April 20, 2024 at 04:04 o'clock

Mitglied: 60730
60730 Jul 07, 2011 at 08:09:27 (UTC)
Goto Top
moin,

zum Thema Entwicklung einer Batch Datei und dem führenden Doppelbefehl @echo off mag ich eigentlich nix mehr schreiben.

Die Frage ist, warum stehen die in einer excel Tabelle und müssen die da drin sein.
  • einmalige Aktion oder immer wiederkehrend?

  • inhalte von xls kannst du nur mit VBS/VBA auslesen.

gruß
Member: bastla
bastla Jul 07, 2011 at 08:09:31 (UTC)
Goto Top
Hallo Sinep1337 und willkommen im Forum!

Bist Du sicher, dass Du all diese Batchdateien brauchst, bzw etwas konkreter: Was ist der Sinn der ganzen Aktion?

Grüße
bastla

[Edit] @t-mo
inhalte von xls kannst du nur mit VBS/VBA auslesen.
... oder als Textdatei speichern ...
[/Edit]
Member: Sinep1337
Sinep1337 Jul 07, 2011 at 08:16:35 (UTC)
Goto Top
@timobeil
und was ist wenn ich die excel-tabelle als txt-datei habe. kann ich dann die informationen als dateinamen daraus entnehmen?

@bastla
Ich brauche die wirklich. Ich arbeite mit einem Programm, was eine gewisse Information braucht. Diese information kann dem Programm aber nur mittels einer batch-Datei vermittelt werden. es sind ca. 2000 Ordner und ich brauche zu jedem eine Batch-Datei mit dem entsprechendem Namen. Und der Inhalt der bat-datei muss auch ein ganz bestimmter sein.


btw: danke, für eure schnelle antwort (:
Member: bastla
bastla Jul 07, 2011 at 08:22:16 (UTC)
Goto Top
Hallo Sinep1337!

Dann beschreibe doch bitte zumindest den Aufbau der Excel-Datei - vor allem: befinden sich alle benötigten Informationen in einer Zeile, welche Sonderzeichen sind ev zu berücksichtigen?

Grüße
bastla
Member: Sinep1337
Sinep1337 Jul 07, 2011 at 08:28:34 (UTC)
Goto Top
Also ich habe es spaltenweise aufgebaut.

- in der ersten spalte stehen die unterschiedlichen Dateinamen, die die Batch-Dateien anschließend haben sollen.

- in der zweiten spalte steht ein Pfad, der in die batch-datei reinn sollte.

was vllt noch erwähnenswert ist: die dateinamen sehen wie folgt aus: Haltung_100005
es fängt bei Haltung_100001 an und endet bei Haltung_102049. Jedoch handelt es sich hierbei NICHT um 2049 Dateien, sonder um ca. 1900, da nicht jede Zahl vergeben ist.

Ich hoffe, das genügt dir als information zu der Excel-tabelle (:

Gruß
Member: bastla
bastla Jul 07, 2011 at 08:33:33 (UTC)
Goto Top
Hallo Sinep1337!

Dann speichere die Tabelle als CSV und verwende etwa folgende Schleife zum Auslesen (nur als Demo für die Zerlegung):
for /f "usebackq tokens=1* delims=;" %%i in ("D:\Die CSV-Datei.csv") do (  
    echo %%i_%%j
    REM hier sind auch
    REM mehrere Zeilen möglich
)
Grüße
bastla
Member: Sinep1337
Sinep1337 Jul 07, 2011 at 08:48:40 (UTC)
Goto Top
Irgendwie versteh ich das nicht so ganz :D

ich hab deine Zeile jetzt einfach mal in meine batch-datei eingefügt:

@echo off

set i=Haltung_100001
:START
echo text > %i%.bat
for /f "usebackq tokens=1-2 delims=;" %%i in ("C:\Dokumente und Einstellungen\hannauw\Desktop\muellmi\Neuer Ordner\liste_wichtig_neuesformat.csv") do (
echo %%i_%%j

set /A i=i+1
IF %i%==10 (exit)
goto :START


kannst du mir das evtl. genauer erklären?
aber td schonmal recht herzlichen Danke (:
Member: bastla
bastla Jul 07, 2011 at 08:59:48 (UTC)
Goto Top
Hallo Sinep1337!

Deine Schleife ist ja nicht mehr nötig, wenn Du ohnehin alle zu erstellenden Dateien aus der CSV-Datei lesen kannst:
for /f "usebackq tokens=1-2 delims=;" %%i in ("C:\Dokumente und Einstellungen\hannauw\Desktop\muellmi\Neuer Ordner\liste_wichtig_neuesformat.csv") do (  
    echo text
    echo Pfad: %%j
)>%%i.bat
Damit wird für jede Datei aus der Liste (vielleicht verwendest Du besser zum Testen eine auf 5 Zeilen gekürzte CSV-Datei) eine Datei mit den zwei Zeilen "text" und "Pfad: <Pfad lt Liste>" erstellt.

Grüße
bastla
Member: Sinep1337
Sinep1337 Jul 07, 2011 at 09:18:24 (UTC)
Goto Top
genau das steht jetzt in meiner .bat.
aber wenn ich diese öffne, passiert nichts.
was mach ich falsch? muss ich noch irgendetwas ergänzen?
woher weiß die bat-datei denn, aus welchen spalten sie den dateinamen und den dateiinhalt entnimmt?

Grüße (;
Member: bastla
bastla Jul 07, 2011 at 09:28:11 (UTC)
Goto Top
Hallo Sinep1337!
woher weiß die bat-datei denn, aus welchen spalten sie den dateinamen und den dateiinhalt entnimmt?
Die Zerlegung jeder einzelnen Zeile der CSV-Datei erfolgt anhand des Trennzeichens ("delimiters") Semikolon - alles bis zum ersten Semikolon wird als Dateiname interpretiert, alles danach als Pfad ...

Um Dir einfach ansehen zu können, wie das funktioniert, verwende folgenden Batch:
for /f "usebackq tokens=1-2 delims=;" %%i in ("C:\Dokumente und Einstellungen\hannauw\Desktop\muellmi\Neuer Ordner\liste_wichtig_neuesformat.csv") do (  
    echo Dateiname: %%i
    echo Pfad: %%j
    echo\
)
pause
Es müssten jetzt für jede Zeile der CSV Dateiname, Pfad und eine Leerzeile in der Konsole ausgegeben werden.

Grüße
bastla
Member: Sinep1337
Sinep1337 Jul 07, 2011 at 09:42:14 (UTC)
Goto Top
Danke, das sieht schonmal gut aus.
Also muss ich jetzt nur noch das "pause" wegmachen? oder muss da dann was anderes hin?

und wo werden die dateien dann ausgegeben bzw. erstellt?


Gruß (:
Member: Skyemugen
Skyemugen Jul 07, 2011 at 09:57:52 (UTC)
Goto Top
Aloha Sinepleet ... dafür, dass du 1337 bist, stellst du aber gar lustige Fragen

bastla schrieb doch:
Es müssten jetzt für jede Zeile der CSV Dateiname, Pfad und eine Leerzeile in der Konsole ausgegeben werden.

Mit dem letzten Code wird noch gar nichts erstellt, in seinem vorherigen Code schon eher aber das war wohl nicht wie gewollt von dir (?).

Wenn du direkt hinter der letzten Klammer noch ein >Dateiname.bat setzt, würde eine Datei erstellt werden, die Frage ist nun (oder bin ich blind): Wie sollen die Batchdateien benannt werden, die du somit erstellen lassen willst?
Erstellt werden die, sofern kein Pfad angegeben wird, in dem Verzeichnis, in dem die ausgeführte Batchdatei ihren Ursprung sucht.

greetz André

P.S.: Das Programm liest wirklich .bat-Dateien als Informationen ein?
Member: Sinep1337
Sinep1337 Jul 07, 2011 at 10:02:29 (UTC)
Goto Top
Ich habs jetzt hinbekommen.
Meine batch-datei erstellt nun batch-dateien, in denen der pfad drin steht.
jedoch möchte ich nun einen relativen pfad haben und keinen absoluten.
das muss nämlich hinterher auf einem anderen pc funktionieren, wo die datein natürlich woanders gelagert sind.

Danke (:
Member: bastla
bastla Jul 07, 2011 at 10:30:11 (UTC)
Goto Top
Hallo Sinep1337!
jedoch möchte ich nun einen relativen pfad haben und keinen absoluten.
Dazu würde ich einfach in Excel per Suchen / Ersetzen den nicht gewünschten Pfadanteil eliminieren und dann nochmals in die CSV-Datei exportieren ...

Grüße
bastla
Member: Sinep1337
Sinep1337 Jul 07, 2011 at 11:06:52 (UTC)
Goto Top
Also ich hab in excel den pfad verkürzt. aber wenn ich die batch-datei benutze um die anderen batch-dateien zu erstellen funktioniert alles. wenn ich dann jedoch die neuen batch-dateien öffnen will, um den zielordner zu öffnen, steht da, dass der pfad ungültig ist etc.

gibts da noch ne andere möglichkeit?
Mitglied: 60730
60730 Jul 07, 2011 at 11:46:53 (UTC)
Goto Top
Servus,

irgendwie rätsel ich jetzt aber etwas....

Also ich hab in excel den pfad verkürzt. aber wenn ich die batch-datei benutze um die anderen batch-dateien zu erstellen funktioniert alles
naja ein auslesen und schreiben ist ja auch banane, dafür zu Sorgen, dass auch das richtige drin steht doch die Pflicht.
wenn ich dann jedoch die neuen batch-dateien öffnen will, um den zielordner zu öffnen, steht da, dass der pfad ungültig ist etc.
um das irgendwie nachvollziehen zu können und um deine Zeile
das muss nämlich hinterher auf einem anderen pc funktionieren, wo die datein natürlich woanders gelagert sind.

irgendwie in einklang zu bringen mußt du die Hosen runter lassen und demos / Beipiele liefern.

btw: Wenn ich was baue, was allüberall laufen soll - versuche ich einen Standard Pfad zu nehmen, von daher ist dein "natürlich" woanders gelagert auch etwas komplexer zu verstehen.

Oder ich baue Variablen
if exist c:\test\job set "heim=c:\test\job"  
if exist d:\test\job set "heim=d:\test\job"  
if exist y:\test\job set "heim=y:\test\job"  

echo das zeug liegt in %heim%
pause
Member: Sinep1337
Sinep1337 Jul 07, 2011 at 12:03:12 (UTC)
Goto Top
Alsooo:

Ich fang mal an, das komplett zu erklären.
ich brauchte ja eine bat-datei, die mir mehrere bat-dateien erstellt mit den namen aus der excel-tabelle & als inhalt der pfad aus der excel-tabelle.
ich brauche die bat-dateien, damit ich die mit einem programm verknüpfen kann. wenn ich diese dort einpflege sollte sich der ordner zu der jewiligen batch datei öffnen. (es gibt zu jeder bat-datei einen ordner, der genauso heißt).
mein problem ist jetzt folgendes:
wenn ich an dem pc bleiben würde, dann wäre das ja alles kein problem. aber ich muss das auch von einem anderen pc öffnen können (mit dem jew. programm), der mit sicherheit einen anderen pfad für die ordner hat.
nun bräuchte ich das so, dass sich beim ausführen der bat-dateien, der ordner z.B. haltung_100203 öffnet. egal wo ich bin. der soll sich öffnen, sofern er irgendwo auf dem pc bzw. auf dem server ist.

hilft dir das evtl. weiter um mir weiterzuhelfen? ;D

Grüße (:
Mitglied: 60730
60730 Jul 07, 2011 at 12:16:08 (UTC)
Goto Top
Zitat von @Sinep1337:
hilft dir das evtl. weiter um mir weiterzuhelfen? ;D

so halbwegs....

als Demo
for /f "tokens=3 delims= " %a in ('dir haltung_100203 /AD ^|find "Verzeichnis von"') do echo %a  
als einzeiler
for /f "tokens=3 delims= " %%a in ('dir haltung_100203 /AD ^|find "Verzeichnis von"') do set "heim=%%a"  

wäre jetzt ein ganz kriminellummer Weg den Pfad rauszufinden, wo denn haltung_100203 wäre - vorausgesetzt, wir müsten nicht alle existierenden Laufwerke abkaspern.

Nochmal - den Inhalt und das, was gesucht werden soll - vorher /nachher macht doch mehr Sinn für uns - du weißt, was du willst und wir nicht.
Grüße (:
Member: bastla
bastla Jul 07, 2011 at 12:16:29 (UTC)
Goto Top
Hallo Sinep1337!

Vielleicht hilft es Dir ja, dass Du den Pfad der Batch-Datei mit
set "Heim=%~dp0"
in eine Variable schreiben bzw mit
<code tyxpe="plain">cd /d "%~dp0"

deren Ordner zum aktuellen Ordner machen kannst ...

[Edit] @t-mo
Dann würde ich aber eher ein dir /s /b /ad \Haltung_100203 verwenden ...
[/Edit]

Grüße
bastla