AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Probleme mit kurzen und langen Dateinamen / Übergabe
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit kurzen und langen Dateinamen / Übergabe

Ein Thema von frieder2008 · begonnen am 21. Mär 2009 · letzter Beitrag vom 21. Mär 2009
 
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#1

Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 13:14
Moin Leute,

ich sitze seit einiger Zeit an folgendem Problem:

Ich starte via CreateProcess eine Batch-Datei und übergebe ihr zwei Dateinamen, die ihrerseits wiederum mit dem nachfolgendem Code an ein Perl-Skript weitergegeben werden (etwas um die Ecke, geht aber grade nich anders). Mein Problem ist: Die Batchdatei startet zwar, übergibt die Dateinamen aber offenbar falsch. Warum?!? Habe es schon mit kurzen Dateinamen versucht, mit "" - hat aber alles nix geholfen.

Wenn ich das Batch-File via cmd starte und die Dateinamen in Kurzform ("C:\DOKUME~1\FRIEDE~1\EIGENE~1\Delphi\TAGGED~1\te st.TXT" "C:\DOKUME~1\FRIEDE~1\EIGENE~1\Delphi\TAGGED~1\TAG GED~1.200\tagged_test.TXT") dann klappt es ohne Probleme.

Ich will eigentlich einfach nur die Batchdatei mit zwei Parametern (als lange Windows-Dateinamen inkl. Leerzeichen) übergeben. Kann doch nicht so schwer sein. Dacht ich.

Dankbar für jeden Tipp!
Gruß, frieder


Delphi-Code:

Delphi-Quellcode:

function ExecAndWait(const Filename, Params: string;
                           WindowState: word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  //Dateinamen in Anführungszeichen wg. langer Dateinamen mit Blanks
  CmdLine := '"' + Filename + '"' + Params;

  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do
  begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;

  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, FALSE,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);

  //Warten bis beendet
  if Result then
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end;


procedure TForm1.Button6Click(Sender: TObject);
var
par: string;
temp: tstringlist;
i: integer;
begin

  if filelist.Items.count = 0 then exit;

  if checkbox1.checked then
    begin
    createdir(filelist.directory + '\tagged_' + datetostr(date));
    edit2.text:= (filelist.directory + '\tagged_' + datetostr(date));
    end
    else edit2.text:= filelist.directory;

  for i:=0 to filelist.Items.count-1 do
    begin

    par:= '"' + shortfilename(filelist.directory + '\' + filelist.Items.Strings[i]) + '" "' + shortfilename(edit2.text) + '\tagged_' + filelist.items.strings[i] + '"';

    memo3.lines.add(par);

    Execandwait(extractfiledir(edit1.text) + '\CCCGraph.bat', par, sw_shownormal);

    if fileexists(edit2.text + '\tagged_' + filelist.items.strings[i]) then memo3.Lines.add(edit2.text + '\tagged_' + filelist.items.strings[i])
      else messagedlg('Achtung! Ein Fehler ist aufgetreten! Bitte prüfen Sie alle Einstellungen und Arbeitsvorraussetzungen (Ist Perl installiert?)', mterror, [mbok],0);
    end;

  if fileexists(extractfiledir(edit1.text) + '\CCCGraph.bat') then deletefile(extractfiledir(edit1.text) + '\CCCGraph.bat');

end;

Der Batch-Code:

Code:
@echo off
set TAGDIR=C:\DOKUME~1\FRIEDE~1\EIGENE~1\ARBEIT~1\TREETA~1
set BIN=%TAGDIR%\bin
set CMD=%TAGDIR%\cmd
set LIB=%TAGDIR%\lib
set TAGOPT=%LIB%\german.par -token -lemma -sgml -no-unknown

if "%2"=="" goto label1
perl %CMD%\tokenize.pl -a %LIB%\german-abbreviations %1 | %BIN%\tree-tagger %TAGOPT% > %2
goto end

:label1
if "%1"=="" goto label2
perl %CMD%\tokenize.pl -a %LIB%\german-abbreviations %1 | %BIN%\tree-tagger %TAGOPT% 
goto end

:label2
echo.
echo Usage: tag-german file {file}
echo.

:end

EDIT:

Anders gefragt: Warum funktionier DAS nicht (mit obiger Funktion):

Delphi-Quellcode:
  Execandwait('C:\Dokumente und Einstellungen\frieder\Eigene Dateien\Arbeit_GS\TreeTagger\bin\CCCGraph.bat',
  '"C:\DOKUME~1\FRIEDE~1\EIGENE~1\Delphi\TAGGED~1\test.TXT" "C:\DOKUME~1\FRIEDE~1\EIGENE~1\Delphi\TAGGED~1\TAGGED~1.200\tagged_test.TXT"', sw_shownormal)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz