flx1990
Goto Top

Gibt set-variable erst beim zweiten einlesen aus

Hallo,
ich programmiere grade ein script zur verarbeitung von 6000 pdf-dateien der intranet-seite meiner firma.
so, ich kann den code nur in eine zeile schreiben
so siehts aus:
also es sind drei script.
1.
pdftotext.exe "C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\1.pdf"
konvertiert pdf in txt

2.
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\1.txt"&echo %datei%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&echo "<?php header("Location: %dateiii%.pdf"); exit(); ?>" >> %datei%
schreibt in die die txt "<?php header("Location: 1.pdf"); exit(); ?>"

3.
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\1.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php
bennent 1.txt in 1.php um

so ich habe aber folgendes problem:
1. funktioniert komplett
bei 2. funktioniert das ausgeben der richtigen variable erst beim 2ten einlesen und gleichzeitigen auslesen mit echo
in set ist die variable aber schon nach dem erstenmal richtig gespeichert.
das ist schon sehr komisch

also hier nochmal das problem veranschaulicht:
set var="bla"&echo %var%
rem wird das ausgeben was vorher in der var drin stand aber nicht bla.

ich hoffe ihr könnt mir helfen.
sitze jetz schon ewigkeiten daran und das per hand an 6000 dateien geht auch nicht...

Content-ID: 169539

Url: https://administrator.de/forum/gibt-set-variable-erst-beim-zweiten-einlesen-aus-169539.html

Ausgedruckt am: 24.12.2024 um 01:12 Uhr

pieh-ejdsch
pieh-ejdsch 12.07.2011 um 10:03:17 Uhr
Goto Top
moin Sibbel,

aus was für einen Grund kannst Du nur eine CodeZeile schreiben?

wenn Du nur den Dateipfad oder den Namen für das Generieren des neuen Namens brauchst, dann benötigst Du doch keine UmgebungsVariable. Es reicht eine ForVariable!

wenn Du diesen Text
"<?php header("Location: 1.pdf"); exit(); ?>"
aus einer TXT holst wirst Du beim Einzeiler weniger Probleme bekommen.

liesen sich diese 3 Scripts nicht zu einem Zusammenziehen?

Gruß Phil
FLX1990
FLX1990 12.07.2011 um 10:12:56 Uhr
Goto Top
ja, also ich hab das mit drei scirpts mittels übergabe von variabeln mittels call versucht, das hat aber nicht so ganz funktioniert.
deswegen sieht das ganze gedöns jetz so aus:
@echo off
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\1.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php  
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\10.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php  
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\11.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php  
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\12.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php  
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\2.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php  
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\3.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php  
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\4.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php  
set datei="C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\5.txt"&echo %datei%&for /f %i in ("%datei%") do set dateii=%~di%~pi&echo %dateii%&for /f %i in ("%datei%") do set dateiii=%~ni&echo %dateiii%&ren %dateii%%dateiii%.txt %dateiii%.php  
...
usw.
halt mit notepad und ersetzen gelöst.
und das ist ja erst eine von drei dateien haha


und das
"<?php header("Location: 1.pdf"); exit(); ?>"  
will ich nicht aus den txt ziehen sondern rein schreiben mit dem aktuellen dateinamen der pdf...

nur schreibt er mir bei meinem aktuellen script immer den dateinamen der vorrigen datei.

und wie setzte ich den eine for-variable? kenn das nur mit set...
kenn mich auch nicht so aus in sachen batch-programmierung. ich hatte halt keinen bock 6000 pdfs einzelen zu bearbeiten ;)
Skyemugen
Skyemugen 12.07.2011 um 10:21:46 Uhr
Goto Top
Aloha,

nur so nebenbei:
  • alles mit & zu verknüpfen ist ja der reinste Bandwurm, selbst ich als Einzeilerfreund bekomme das Grauen dabei ... (manchmal sind Einzeiler einfach unangebracht)
  • das set ist eben insofern überflüssig, dass du einfach (bei einer sinnvolleren for-Strukturierung) dann sinnvollerweise %~dpni.txt nutzen kannst ... und wenn der Ausgang eh die .txt ist, kannst du auch gleich %~fi nehmen

Warum schreibst du das hier eigentlich als batch-like-Skript, wenn es doch nur Einzeiler für den cmd sind? (oder sehe ich die doppelten Prozentzeichen nur nicht?)

greetz André
FLX1990
FLX1990 12.07.2011 um 10:25:07 Uhr
Goto Top
ne sry du hast recht
das ist nur cmd...
ok ich versuch das mal mit dem for
danke

EDIT:
aber wenn ich fi nehme, unterscheidet sich das ganze doch garnicht zu meiner %datei% und die %dateiii% (sry mir ist nix besseres eignefallen face-smile ) brauch ich ja um in dem php script was in die txt geschrieben werden soll die datei mit der endung php zu versehen und nicht das es datei.txt.php heißt
mathe172
mathe172 12.07.2011 um 10:31:15 Uhr
Goto Top
Hallo,

wenn die Dateien wirklich so nummeriert sind (1,2,3,...,10,11,...,6000) dann versuch mal das:
@echo off
pushd "C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\"  
REM Obergrenze anpassen
for /l %%A in (1,1,6000) do (
   pdftotext.exe "C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\%%A.pdf"  
   >>"%%A.txt" echo ^<?php header^("Location: %%A.pdf"^); exit^(^); ?^>  
   ren "%%A.txt" "%%A.php"  
)
Und wenn einfach alle pdfs im Ordner bearbeitet werden sollen:
@echo off
pushd "C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\"  
for /f %%A in ('dir /b *.pdf') do (  
   pdftotext.exe "C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\%%A"  
   >>"%%~nA.txt" echo ^<?php header^("Location: %%A"^); exit^(^); ?^>  
   ren "%%~nA.txt" "%%~nA.php"  
)

MfG,
Mathe172
Skyemugen
Skyemugen 12.07.2011 um 10:33:18 Uhr
Goto Top
Aloha,

und wenn du doch noch eine batch daraus machst, kannst du es dir auch sparen, jede Datei einzeln anzugeben und stattdessen eine schöne Schleife setzen face-wink

Und bei all dem Gewusel bin ich dennoch verwirrt, was jetzt eigentlich die Problematik war *lach*

greetz André
FLX1990
FLX1990 12.07.2011 um 10:40:34 Uhr
Goto Top
das script klingt ja sehr vielversprechend :D
also ich hab die pdfs in zig unterverzeichnissen, aber alle in C:\xampp\htdocs\
deswegen habe ich das untere script genommen

nur leider funktioniert es irgendwie nicht
wenn ich es in eine batch 1zu1 übernehme und über cmd aufrufe, tut er garnichts und öffnet im verzeichnis nur C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\

was mache ich falsch?

EDIT:
habs von C:\xampp\htdocs\ aufgerufen, weil da die pdftotext.exe leigt
ist das der fehler?
pieh-ejdsch
pieh-ejdsch 12.07.2011 um 10:42:22 Uhr
Goto Top
Du benutzt in der Zeile den Befehl
FOR /f ...%i ist Die ForVariable.

Eine BefehlsZeile wird eine in dieser Zeile gesetzte Variable nicht als Aktuell gesetzte Variable Auflösen. Es sei denn Du Verwendest "Setlocal Enable DelayedExpansion" aber schon Vorher.
ich sehe keinen Grund den Bandwurm nicht auf einzelne Zeilen zu entblättern.

Übergib die Daten doch per Batchparameter %1 oder arbeite das ganze Verzeichnis mit einer Forschleife ab.

@echo off

pushD "C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe"  

for %%i in (*.txt) do (
  echo %%~ni
  >&3 echo "<?php header("Location: %%~ni.pdf"); exit(); ?>"  
) 3>>%%~ni.php
popD

Also das hab ich jetzt Rausklamüstert.

PS.: was für Bibers counter
bennent 1.txt in 1.php um

Gruß Phil
FLX1990
FLX1990 12.07.2011 um 10:48:41 Uhr
Goto Top
@pieh-ejdsch danke schonmal für das script
funktioniert auch prima, mit umbennen und so
er schreibt mir auch die php zeile in die php, nur leider löscht er dabei gleich den gesamten inhalt der datei... face-sad

EDIT:
und leider benennt er ja alle txt in php um, ich habe aber auch txt aufn websvr die vorher keine pdfs waren.
kann man das irgendwie auf eine solche datei anwenden? das er sich daraus die pfade holt?

C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\1.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\10.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\11.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\12.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\2.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\3.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\4.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\5.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\6.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\7.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\8.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\9.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\Inhalt.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M01_ Tafelschere.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M02_ Saeulen- Staenderbohrmaschinen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M03_ Drehmaschinen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M04_ Fraesmaschinen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M05_ Schleifmaschinen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M06_ Schleifboecke.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M07_ Bandschleifmaschine.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M08_ Lichtbogenhandschweissen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M09_ Gasschweissen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M10_ WIG-Schutzgasschweissen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M11_ CNC- Drehmaschinen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M12.1_ Betriebsart 4.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M12_ CNC-Bearbeitungszentren.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M13_ Koordinatenschleifmaschine.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M14_ CNC-Rundschleifmaschinen.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M15_ Werkzeugschleifmaschine.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M16_ Nietmaschine.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M17_ Bandsaegemaschine.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M18.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M19.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M20_ Schrumpfgeraet.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M21_ Praegeschraubstock.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M22.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M23.txt
C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Maschinen\BA-M24.txt
...
Skyemugen
Skyemugen 12.07.2011 um 10:50:02 Uhr
Goto Top
Aloha,

hm, mathe arbeitet mit pushd und das ohne popd tze tze tze *fg*.
Und wenn du zig Unterverzeichnisse hast, benötigst du auch den Schalter /s im dir, desweiteren wäre ich für
@echo off
for /f %%a in ('dir /b /s "C:\xampp\htdocs\Arbeitssicherheit\Betriebsanweisungen\Gefahrstoffe\*.pdf"') do (  
   REM wo liegt eigentlich die pdftotext.exe? Im System32?
   pdftotext.exe "%%a"  
   >>"%%~dpna.txt" echo ^<?php header^("Location: %%~nxa"^); exit^(^); ?^>  
   ren "%%~dpna.txt" "%%~na.php"  
)
pause
goto :eof

wenn ich das recht überblicke

greetz André

edit: aha, die pdfto... liegt also ... dann sollte hier der gesamte Pfad rein
FLX1990
FLX1990 12.07.2011 um 11:05:13 Uhr
Goto Top
ach du ###e
@Skyemugen das script ist ja der hammer
so ein paar zeilen un der macht das alles perfekt

ich sitze da seit gestern morgen dran!!!! bei 8 stunden arbeitstag!!!

dankedankedanke :D
pieh-ejdsch
pieh-ejdsch 12.07.2011 um 11:12:25 Uhr
Goto Top
..., nur leider löscht er dabei gleich den gesamten inhalt der datei...
nö die PHP Dateien werden nur Angefügt/erstellt.

Sky's schnipsel arbeitet nur die vorhandenen PDFs ab.

Gruß Phil
FLX1990
FLX1990 12.07.2011 um 11:16:55 Uhr
Goto Top
hm dann hat ich iwas falsch geamcht,
da wurde iwie immer allees komplett ersetzt

nunja grade läuft das script durch und mal schaun ob alle gegeht hat,
die ersten ordner sehn schonmal richtig aus.
FLX1990
FLX1990 12.07.2011 um 11:20:40 Uhr
Goto Top
es hat alles funktioniert
nochmals tausend dank an alle

jetzt muss ich das nur noch mit docs via antiword machen, aber mit der syntax wird das wohl kein prob sein
thx :D
Skyemugen
Skyemugen 12.07.2011 um 11:29:55 Uhr
Goto Top
Aloha,

mathe172 hatte es ja schon gut vorgegeben, ich habe es ja nur optimiert *gg*.

Wenn es gelöst ist, setze doch den Thread bitte auf gelöst face-wink

docs via antiword ... ich frag' besser nicht nach ^_^

greetz André
FLX1990
FLX1990 12.07.2011 um 12:00:24 Uhr
Goto Top
antiword haha face-smile

ja eine klitzekleine frage noch

die syntax von antiword ist so
C:\xampp\htdocs\doc2txt\antiword -m cp852.txt "docdokument.doc" > "txtdokument.txt"

jetzt habe ich das script so angepasst:
@echo off 
for /f %%a in ('dir /b /s "C:\xampp\htdocs\Arbeitssicherheit\Ersthelfer2\*.doc"') do (   
   C:\xampp\htdocs\doc2txt\antiword -m cp852.txt "%%~dpna.doc" > "%%~dpna.txt"  
   >>"%%~dpna.txt" echo ^<?php header^("Location: %%~nxa"^); exit^(^); ?^>   
   ren "%%~dpna.txt" "%%~na.php"   
) 
pause 
goto :eof

jetzt erzeugt er mir die richtigen txt mit dem php string drin
dann nennt er die txt in php um und löscht alles bis auf den string komisch...
dabei kopiert er die txt sozusagen den diese bleiebn erhalten
sodass ich am ende die korrekten txt mit falscher endung
und kaputte php aber mit richtiger endung habe
:D

whats wrong with that?
FLX1990
FLX1990 12.07.2011 um 12:06:44 Uhr
Goto Top
ähh sry geht doch óÒ
daanke face-smile