Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Übergabe von mehreren Dateien an eine EXE

Frage Entwicklung Batch & Shell

Mitglied: golsin

golsin (Level 1) - Jetzt verbinden

26.08.2014, aktualisiert 13:56 Uhr, 1158 Aufrufe, 2 Kommentare

Hallo alle zusammen,
ich grübel schon seit mehreren Tagen an einem Script was mehrere Dateien zur Verarbeitung an eine "runner.exe" weitergeben soll.

Dabei ist bekannt das die Dateien im Format "\\server\dir1\file1.ext;\\server\dir2\file2.ext;\\server\dir3\file3.ext;"... an die Batch übergeben werden, nicht aber wie viele Dateien jedes mal übergeben werden, dass ist willkürlich bzw. von einem anderen Programm abhängig worin das Batchscript eingebunden ist (kann man aber zum besseren Verständnis vernachlässigen).

Die runner.exe versteht dieses Format aber nicht und kann nur Dateien einzeln abarbeiten, das heißt "\\server\dir1\file1.ext" und dann "\\server\dir2\file2.ext" usw.
Um das abzufangen habe ich einfach den input über FOR auf 9 Variablen aufgespalten (die über das ; getrennt werden), da ich mir sicher bin das niemals mehr als neun Dateien übergeben werden. (Geht aber bestimmt auch eleganter, nur wie müsste man halt wissen )
Was noch Problematisch ist bei dieser art der Abfrage ab wann der Pfad Endet um das unnötige aufrufen der runner.exe zu vermeiden.

Ein Aufruf der Batch würde dementsprechend so aussehen:
01.
call.bat "\\server\inputdir1\inputfile1.ext;\\server\inputdir2\inputfile2.ext;\\server\inputdir3\file3.ext;" "\\server\outputdir1\"
Darin wird dann die runner.exe aufgerufen:
code type="batch">call "C:\runner.exe" -m "%input%" "%output%\%basename%"</code>

Im Endeffekt soll die Batch Datei automatisch erkennen können wie viele Dateien übergeben werden und als einzelne aufrufe an die runner.exe mit entsprechenden Ausgabepfad + Dateiname von der Eingabedatei übergenen.

Ich hoffe ihr könnt mir weiterhelfen =)

Hier ist das Script was ich mir zusammengestrickt habe:
01.
Setlocal EnableDelayedExpansion 
02.
set input=%1 
03.
set output=%2 
04.
     
05.
    Set "input1=0" 
06.
    Set "input2=0" 
07.
    Set "input3=0" 
08.
    Set "input4=0" 
09.
    Set "input5=0" 
10.
    Set "input6=0" 
11.
    Set "input7=0" 
12.
    Set "input8=0" 
13.
    Set "input9=0" 
14.
	 
15.
FOR /f "delims=; tokens=1,2,3,4,5,6,7,8,9" %%i in (%input%) DO ( 
16.
    Set "input1=%%i" 
17.
    Set "input2=%%j" 
18.
    Set "input3=%%k" 
19.
    Set "input4=%%l" 
20.
    Set "input5=%%m" 
21.
    Set "input6=%%n" 
22.
    Set "input7=%%o" 
23.
    Set "input8=%%p" 
24.
    Set "input9=%%q" 
25.
26.
	 
27.
IF %input1% NEQ 0 ( 
28.
		FOR %%a in (%input1%) do (set basename1=%%~nxa) 
29.
		call "C:\runner.exe" -m "%input1%" "%output%\%basename1%" 
30.
		) ELSE (ECHO Datei 1 nicht angegeben) 
31.
IF %input2% NEQ 0 ( 
32.
	FOR %%a in (%input2%) do (set basename2=%%~nxa) 
33.
		call "C:\runner.exe" -m "%input2%" "%output%\%basename2%" 
34.
		) ELSE (ECHO Datei 2 nicht angegeben) 
35.
IF %input3% NEQ 0 ( 
36.
	FOR %%a in (%input3%) do (set basename3=%%~nxa) 
37.
		call "C:\runner.exe" -m "%input3%" "%output%\%basename3%" 
38.
		) ELSE (ECHO Datei 3 nicht angegeben) 
39.
IF %input4% NEQ 0 ( 
40.
	FOR %%a in (%input4%) do (set basename4=%%~nxa) 
41.
		call "C:\runner.exe" -m "%input4%" "%output%\%basename4%" 
42.
		) ELSE (ECHO Datei 4 nicht angegeben) 
43.
IF %input5% NEQ 0 ( 
44.
	FOR %%a in (%input5%) do (set basename5=%%~nxa) 
45.
		call "C:\runner.exe" -m "%input5%" "%output%\%basename5%" 
46.
		) ELSE (ECHO Datei 5 nicht angegeben) 
47.
IF %input6% NEQ 0 ( 
48.
	FOR %%a in (%input6%) do (set basename6=%%~nxa) 
49.
		call "C:\runner.exe" -m "%input6%" "%output%\%basename6%" 
50.
		) ELSE (ECHO Datei 6 nicht angegeben) 
51.
IF %input7% NEQ 0 ( 
52.
	FOR %%a in (%input7%) do (set basename7=%%~nxa) 
53.
		call "C:\runner.exe" -m "%input7%" "%output%\%basename7%" 
54.
		) ELSE (ECHO Datei 7 nicht angegeben) 
55.
IF %input8% NEQ 0 ( 
56.
	FOR %%a in (%input8%) do (set basename8=%%~nxa) 
57.
		call "C:\runner.exe" -m "%input8%" "%output%\%basename8%" 
58.
		) ELSE (ECHO Datei 8 nicht angegeben)	 
59.
IF %input9% NEQ 0 ( 
60.
	FOR %%a in (%input9%) do (set basename9=%%~nxa) 
61.
		call "C:\runner.exe" -m "%input9%" "%output%\%basename9%" 
62.
		) ELSE (ECHO Datei 9 nicht angegeben)	
Mitglied: rubberman
LÖSUNG 26.08.2014, aktualisiert um 13:56 Uhr
Hallo golsin,

ungetestet etwa so:
01.
@echo off &setlocal 
02.
set "input=%~1" 
03.
set "output=%~2" 
04.
 
05.
for %%i in ("%input:;=" "%") do ( 
06.
  if "%%~i" neq "" call "C:\runner.exe" -m "%%~i" "%output%\%%~nxi" 
07.
)
Grüße
rubberman
Bitte warten ..
Mitglied: golsin
26.08.2014 um 13:56 Uhr
Tausend, tausend danke!
Funktioniert genauso wie ich mir das gedacht habe, schade das man auf so etwas nie selber kommt.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Installation
gelöst Integrieren von .exe-Dateien in eine Windows 7-Installation möglich? (2)

Frage von Todybear zum Thema Windows Installation ...

Windows Server
gelöst Administrator kann auf Server keine EXE-Dateien kopieren, löschen, anlegen (5)

Frage von Winfried-HH zum Thema Windows Server ...

Batch & Shell
gelöst Powershell: Dateien nach Version löschen in mehreren Ordnern (4)

Frage von ImmerKind zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...