Die Klammern in Namen sollten kein Problem darstellen. (Es sei denn, die Zeichenfolge wird in Ausdrücken ausgewertet, in denen sie eine Bedeutung haben.) Danke an ikegami für den Kommentar, der mich zum Testen zurücksendet.
Allerdings ist der Raum ein Problem mit glob und braucht
my $src = 'c:\temp\ (1)J';
foreach my $f (glob "$src/*") {
move $f, "\out";
}
Beachten Sie, dass glob
gibt die Datei mit dem Pfad entkommen, so dass Sie nicht brauchen (noch wollen) Pfad hinzuzufügen. Beachten Sie auch, dass wir brauchen die die einfachen Anführungszeichen, wenn $src
zugeordnet ist, oder q()
.
Das Problem ist, dass mit $dir = 'dir A'
nach "$dir"
der glob
hat dir A
, die es als Verzeichnisse interpretiert dir
und A
(gilt auch für Dateien geht). Daher müssen Sie Leerzeichen irgendwie umgehen, oder doppelte Anführungszeichen, glob qq{"$src/*"}
, wo die äußeren Anführungszeichen alle "Wörter" in eine Zeichenfolge ziehen.
Es ist besser File::Glob in Bezug auf Räume zu verwenden, das nicht über dieses Problem
: bsd_glob
Die :bsd_glob
Export-Tag Exporte bsd_glob()
und den unten aufgeführten Konstanten. Es überschreibt auch glob()
im aufrufenden Paket mit einem, das sich wie bsd_glob()
in Bezug auf Leerzeichen verhält (der Speicherplatz wird als Teil eines Dateinamens behandelt), unterstützt jedoch Iteration im skalaren Kontext; h., es behält das Merkmal der Kernfunktion bei, das nächste Element jedesmal zurückzugeben, wenn es aufgerufen wird.
Achten Sie jedoch darauf, NOTES über die Verwendung von (zurück) Schrägstriche unter Windows zu sehen. Auszug
- Auf DOSISH Systemen ist Backslash ein gültiges Verzeichnis-Trennzeichen.
...
- Win32-Benutzer sollten den echten Schrägstrich verwenden.Wenn Sie wirklich Schrägstriche verwenden möchten, sollten Sie File::DosGlob mit Sarathy ist, die mit der Standard-Perl-Distribution
Mit dem File::DosGlob
kommt, wird man wieder Räume zu entkommen.
Eigentlich ist es der Raum, der ein spezieller Glob-Charakter ist, nicht die Parens. Du musst ihm entkommen. – ikegami
Im zweiten Beispiel haben Sie 'c: ...' anstelle von 'c: \ ...' –
ikegami