117553
Goto Top

Batch dir und Html Link ausgabe

Hallo zusammen,

folgendes Problem, ich möchte eine Batch mit folgender function

dir Ordner plus Unterordner durchsuchen ausgabe ohne Kopfzeile.... klar dir /b /s
einzelnes Ergebniss in Variable speichern ausgabe html datei mit links zu den einzelnen dateien (nur PDF) *.pdf

Also dachte in etwa so:

@echo off
for /f %%i (' dir "C:\test\*.pdf" /b /s ') do set verz=%%i  
echo ^<a href="   %verz% ^</a^> >>Link.html  
:eof

hab die Suche wirklich benutzt und lange probiert nur steig leider nicht dahinter...

mfg Markus

Content-Key: 247326

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: rubberman
Solution rubberman Aug 24, 2014 updated at 22:23:33 (UTC)
Goto Top
Hallo Markus, willkommen im Forum.

Da kommen gleich mehrere Probleme zusammen.
  • Für lokale Pfade brauchst du eine File-URL
  • Backslashes sind in URLs Slashes
  • In URLs sind nur bestimmte Zeichen erlaubt. Zeichen (wie bspw. Leerzeichen) müssen kodiert werden
  • Dein Browser wird vermutlich nicht auf lokale Dateien zugreifen dürfen

Um diese Probleme zu lösen könntest du eine kombinierte Datei aus Batch und JScript schreiben (um die encodeURI Funktion nutzen zu können), sowie statt der HTML eine HTA Datei kreieren.

*.bat
@if (@X)==(@Y) @end /* Hybrid Zeile, die einen JScript Kommentar einleitet

:: Batch Part:
@echo off &setlocal

set "htafile=Link.hta"  

>"%htafile%" echo ^<html^>^<head^>^<HTA:APPLICATION WINDOWSTATE="maximize"^>^<title^>PDF Links^</title^>^</head^>^<body^>  

set begin=^<a href=^"file:///&set middle=^"^>&set end=^</a^>^<br^>  
>>"%htafile%" (  
  for /f "delims=" %%i in ('dir /a-d /b /s "*.pdf"') do (  
    set "file=%%i"  
    for /f "delims=" %%j in ('cscript //e:jscript //nologo "%~f0"') do (  
      set "url=%%j"  
      setlocal EnableDelayedExpansion
      echo !begin!!url!!middle!!file!!end!
      endlocal
    )
  )
)

>>"%htafile%" echo ^</body^>^</html^>  
pause
exit /b

:: JScript Part: */
WScript.Stdout.WriteLine(
  encodeURI(
    WScript.CreateObject("WScript.Shell").Environment("PROCESS")("file").replace(/\\/g, "/")  
  )
);

Grüße
rubberman

EDIT: Support für Dateinamen mit Ausrufezeichen ergänzt.
EDIT2: Überflüssigen Slash entfernt
Mitglied: 117553
117553 Aug 24, 2014 at 20:41:58 (UTC)
Goto Top
oh mein Gott, ich war grad dabei es mit dem Teil aus dem Tutorial zu versuchen
"Die Variante zur Erzeugung von Zahlenfolgen, FOR /L mit setlocal enabledelayedexpansion " als mein Kopf auf die Tastatur knallte.... hab ich deine Nachricht gelesen und ausprobiert.... häng jetz seit einer Woche auf arbeit und zuhause dran und nu... weiß nicht was ich sagen sollen ausser HERZLICHSTEN DANK!
Member: rubberman
rubberman Aug 24, 2014 at 20:56:12 (UTC)
Goto Top
Hallo Markus,

gern geschehen face-wink

Ich habe den Code oben noch einmal leicht verändert, um auch Dateinamen mit Ausrufezeichen vernünftig verarbeiten zu können.

Grüße
rubberman
Mitglied: 117553
117553 Aug 25, 2014 at 09:37:35 (UTC)
Goto Top
moin moin rubberman,

danke nochmal! ein Problem hab ich jetzt noch....
Umlaute bekomm ich doch mit "chcp 1252" richtiggestellt aber irgendwie klappt das nicht so richtig
der macht mir trotzdem sowas "Rüstenl" in den Link und dann funktioniert er natürlich auch nicht... leider face-sad
Mitglied: 117553
117553 Aug 25, 2014 at 16:45:26 (UTC)
Goto Top
also da mit chcp is ja auch quatsch weil die Darstellung passt ja nur er übernimmt diese nicht so via Link in den Explorer..
Versuch mit Utf-8 scheiterte auch ebenso wie die Einstellungen des Explorers zu ändern....
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Member: rubberman
Solution rubberman Aug 25, 2014 updated at 18:29:54 (UTC)
Goto Top
Hallo Markus,

da siehst du wie kompliziert Encoding sein kann face-wink
Ich versuchs mal
  • escape statt encodeURI
  • Charset der HTA auf CP850

@if (@X)==(@Y) @end /* Hybrid Zeile, die einen JScript Kommentar einleitet

:: Batch Part:
@echo off &setlocal

set "htafile=Link.hta"  

>"%htafile%" echo ^<html^>^<head^>^<meta charset="cp850"^>^<HTA:APPLICATION WINDOWSTATE="maximize"^>^<title^>PDF Links^</title^>^</head^>^<body^>  

set begin=^<a href=^"file:///&set middle=^"^>&set end=^</a^>^<br^>  
>>"%htafile%" (  
  for /f "delims=" %%i in ('dir /a-d /b /s "C:\test\*.pdf"') do (  
    set "file=%%i"  
    for /f "delims=" %%j in ('cscript //e:jscript //nologo "%~f0"') do (  
      set "url=%%j"  
      setlocal EnableDelayedExpansion
      echo !begin!!url!!middle!!file!!end!
      endlocal
    )
  )
)

>>"%htafile%" echo ^</body^>^</html^>  
pause
exit /b

:: JScript Part: */
WScript.Stdout.WriteLine(
  escape(
    WScript.CreateObject("WScript.Shell").Environment("PROCESS")("file").replace(/\\/g, "/")  
  )
);
Das sollte theoretisch den gewünschten Effekt erzielen ...

Grüße
rubberman
Mitglied: 117553
117553 Aug 25, 2014 at 18:34:29 (UTC)
Goto Top
ohje definitiv unterschätzt!! rubber, fühl dich ganz herzlich gedrückt! besten Dank!
funktioniert exzellente face-smile