Ich benutze Perl für Windows (Active Perl). Ich habe ein Perl-Programm, um die Dateien im aktuellen Ordner zu globieren, und verketten sie alle mit dos copy Befehl aufgerufen von innerhalb mit system () ...
Wenn ich das ausführe, gibt dies einen DOS-Fehler mit der Meldung "Das System kann die angegebene Datei nicht finden". Es hängt mit den Leerzeichen in den Dateinamen zusammen, die ich habe.
Dies ist der Perl-Code: -
%Vor%glob gibt ein Array von Dateinamen in meinem aktuellen Ordner zurück. Diese Dateinamen haben Leerzeichen dazwischen, so dass die Array-Elemente Leerzeichen dazwischen haben. Wenn ich das System (...) verwende, um meinen Kopierbefehl für diese Array-Elemente mit "$ _" wie oben gezeigt auszuführen, gibt es einen Fehler wie oben.
Ich habe einige Methoden ausprobiert, mit denen ich das System aufrufen konnte (...), aber ohne Erfolg.
Ich würde gerne wissen,
1] Wie kann ich damit arbeiten, dass Dateien mit dazwischen liegenden Leerzeichen den obigen Code verwenden? Wie man den Leerraum in den Dateinamen "entkommt".
2] Jede alternative Lösung in Perl, um dasselbe zu erreichen. (Einfache willkommen ..)
Ihr Code fügt den Dateinamen keine Anführungszeichen hinzu.
Versuchen Sie
%Vor%und
%Vor% Beenden Sie die Verwendung von system()
, um einen Anruf zu tätigen, der mit einer tragbaren Bibliothek ausgeführt werden kann. Perl hat das File :: Copy -Modul, benutze das stattdessen und du musst dir keine Sorgen machen über Dinge wie Dadurch erhalten Sie eine viel bessere Portabilität des Betriebssystems.
system
ist selten die richtige Antwort, use File::Copy;
Um alle Dateien zu verketten:
%Vor% Probleme können auftreten, wenn Sie versuchen, auf die Variable $_
in einem inneren Block zuzugreifen. Der sicherste Weg, ändern:
zu:
%Vor% Nehmen Sie dann die notwendigen Änderungen an @args
vor und entziehen Sie doublequotes, um sie in die Zeichenfolge einzufügen.
In Fenstern können Sie normalerweise doppelte Anführungszeichen um die Dateinamen (und / oder Pfade) setzen, um spezielle Zeichen zu ermöglichen, d. h. "lange Dateinamen".
C: \ "mein langer Pfad \ das ist eine Datei.mp3"
Bearbeiten:
Funktioniert das nicht?
%Vor%(HINWEIS: Die DOUBLE-Anführungszeichen in der Zeichenfolge sind keine einfachen Anführungszeichen)
$ filename = ~ s / \ / \ /;
Was immer der Dateiname ist, benutzen Sie einfach den Schrägstrich, um auf Leerzeichen zu verweisen