Wie werden Dateinamen mit Leerzeichen behandelt?

8

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 ..)

    
goldenmean 26.11.2010, 14:13
quelle

6 Antworten

9

Ihr Code fügt den Dateinamen keine Anführungszeichen hinzu.

Versuchen Sie

%Vor%

und

%Vor%     
Ed Guiness 26.11.2010, 14:17
quelle
11

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.

    
Ian C. 26.11.2010 15:24
quelle
7

system ist selten die richtige Antwort, use File::Copy;

Um alle Dateien zu verketten:

%Vor%     
grawity 26.11.2010 15:25
quelle
1

Probleme können auftreten, wenn Sie versuchen, auf die Variable $_ in einem inneren Block zuzugreifen. Der sicherste Weg, ändern:

%Vor%

zu:

%Vor%

Nehmen Sie dann die notwendigen Änderungen an @args vor und entziehen Sie doublequotes, um sie in die Zeichenfolge einzufügen.

%Vor%     
Ruel 26.11.2010 14:23
quelle
1

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)

    
Viper_Sb 26.11.2010 14:17
quelle
0

$ filename = ~ s / \ / \ /;

Was immer der Dateiname ist, benutzen Sie einfach den Schrägstrich, um auf Leerzeichen zu verweisen

    
user3784340 28.02.2017 07:30
quelle

Tags und Links