In den 90er Jahren habe ich *.*
jeden Dateinamen in MS-DOS " " dargestellt, aber ich habe in *
diesen Tagen mehr Skripte gesehen, die nur " " verwendet haben. Macht es überhaupt einen Unterschied, welches ich benutze?
command-line
Foebane
quelle
quelle
*
und*.*
bleibencmd
interne Befehle und moderne Befehlszeilendienstprogramme gleich, doch einige ältere Dienstprogramme, die Dateimaskenparameter verwenden, verwenden möglicherweise ältere Funktionen zum Abgleichen von Dateien. Für sie sind die Masken jedoch nicht gleichwertig.*.*
Token sollte keine Dateien ohne Erweiterung zurückgeben.*.*
keine erweiterungslosen Dateien zurückgegeben werden sollten. Leider schon. Siehe Grawitys Antwort.Antworten:
Dateiname und Dateierweiterung waren ein einziges Feld , seit Windows 95 und NT 3.5 die Unterstützung für lange Dateinamen einführten. Wildcard-Übereinstimmungen werden für den gesamten Dateinamen auf einmal durchgeführt. Infolgedessen können Sie einen Dateinamen ohne Punkte haben (möglicherweise selten für Dateien, aber sehr häufig für Ordner / Verzeichnisse), und auf den ersten Blick
*.*
stimmen solche Dateien nicht wirklich überein.Alte Skripte
*.*
werden nach wie vor Arbeit wegen Kompatibilitätscode - wenn die Platzhalter Enden mit.*
, dass ein Teil wird durch das OS ignoriert. (Wenn Sie also Dateien mit einer bestimmten Dateierweiterung zuordnen möchten, brauchen Sie das wahrscheinlich*.?*
.)Aber darauf sollten Sie sich nicht verlassen. Wenn Sie Skripte für moderne Windows-Versionen schreiben, befolgen Sie deren Konventionen, nicht MS-DOS-Konventionen. (Beachten Sie, dass ab Windows NT .bat-Skripte nicht mehr von MS-DOS, sondern von
cmd.exe
einem systemeigenen Win32-Programm interpretiert werden .)Unter Linux und verschiedenen anderen Unixen waren Name und Erweiterung noch nie voneinander getrennt, und es gibt keine besondere Magie, mit der man
*.*
arbeiten könnte. Es ist also*
die einzige Wahl, die Sinn macht.quelle
*
nur Dateinamen ohne Erweiterung übereinstimmen würden . Die "sichere" Möglichkeit, mit beiden kompatibel zu sein, war die Verwendung**
.*
( standardmäßig ) versteckte Dateinamen nicht überein (beginnend mit a.
).Es ist wahrscheinlich erwähnenswert , dass die Unixy / posixy Schalen wie die Bourne - Shell bash, ksh, zsh usw. Wildcard Erweiterung zu tun (von glob Zeichen wie
*
,?
,[range]
,[!range]
und andere Erweiterungen wie Klammern und erweitern Klackse) eine Liste von Argumenten zu kompilieren , bevor der Befehl ausgeführt wird. Diese Erweiterung erfolgt also durch die Shell und nicht durch den Befehl, für den dies möglicherweise ein Argument ist.dh die Shell ist dafür verantwortlich, was
*
sich*.*
ausdehntDies ist in CMD nicht der Fall (und dies gilt auch für Powershell-Dienstprogramme ), da die Glob-Zeichen wörtlich an den ausgeführten Befehl übergeben werden. Daher liegt die Erweiterung in der Verantwortung des Befehls / Dienstprogramms und nicht der Shell. Letztendlich bleibt es dem Dienstprogramm überlassen , was
*.*
oder was es*
bedeutet, Konventionen einzuhalten (oder nicht). Aus diesem Grunddir *.*
passen die Dienstprogramme von CMD auch Dateien ohne Erweiterungen an (vermutlich fälschlicherweise, jedoch unter Beibehaltung der Erwartungen).Ich glaube, es ist sicher, diesen Weg zusammenzufassen.
quelle
FindFirstFile
selbst ist der Benutzermodus (sowohl kernel32.dll als auch ntdll.dll sind Benutzermodus-Bibliotheken - es ist Teil des Win32-Subsystems, nicht des Kernels), aber es macht nicht wirklich viel.mmv "fred.*" "tom.#1"
. (Der Ersatz verwendet#1
anstelle von*
, was den Vorteil hat, dass Sie Felder nachbestellen können).mmv
wird auf den meisten Systemen nicht standardmäßig installiert, andere Tools zum Batch-Umbenennen jedoch häufig. Lesen Sie diesen Artikel und stackoverflow.com/questions/417916/how-to-do-a-mass-rename .