Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Platzhalter bzw. Wildcards in cmd von WindowsXP und Server 2003

Frage Entwicklung Batch & Shell

Mitglied: Pegasus37

Pegasus37 (Level 1) - Jetzt verbinden

11.06.2009, aktualisiert 08:34 Uhr, 13427 Aufrufe, 8 Kommentare

Guten Morgen!
Ich habe ein Problem beim Einsetzen von Platzhaltern unter Windows.

Ich muß aus einem Verzeichnis in einer Batch-Datei alle Dateien ausfiltern, deren Dateiname mit 31 beginnt und genau 8 Zeichen (ohne Extension) lang ist. Eigentlich wäre das ja kein Problem, da das ? als Wildcard für genau ein beliebiges Zeichen stehen soll. Für einen Dateinamen bis zu 7 Zeichen stimmt das auch, allerdings nicht mehr bei 8 Zeichen. Der Filter 31??????.* findet alles, was mindestens 8 Zeichen lang ist und mit 31 beginnt, also auch längere Dateinamen.
Wie kann ich das Problem umgehen bzw. lösen?
Mitglied: mexx
11.06.2009 um 10:26 Uhr
Ja das Problem kenne ich. Die Wildcardsuche über diese veraltete Shell ist dahingehend nicht clever gemacht. Der Befehl dir 31??????.* findet auch alle 31?, 31??, 31??? und so weiter. Leider ist as so gewollt. Aber ich kann Dir nur dringend empfehlen, Dich mit Powershell auseinander zu setzten. Betrachte Powershell als weiterentwicklung der cmd. Mit den Befehl Get-ChildItem c:\*.* -include 11??????.* erreichst Du Dein Ziel.
Bitte warten ..
Mitglied: Biber
11.06.2009 um 11:46 Uhr
Moin Pegasus37,

falls aber die Zeit drängt und ein kurzfristiger Workaround über die CMD.exe vertretbar sein sollte:
- dann vergiss an dieser Stelle die Filterung über DIR plus ?-Wildcards.

Denn "?" steht NICHT für "genau 1 beliebiges Zeichen", sondern auch für "ein oder kein Zeichen", es sei denn die gesamte Wildcard besteht aus genau einem Fragezeichen *gg

Demo:
01.
>dir /b ?.txt 
02.
x.txt 
03.
 
04.
[okay, so soll es sein] 
05.
 
06.
(=11:41:50  D:\temp=) 
07.
>dir /b ??.txt 
08.
dd.txt 
09.
in.txt 
10.
js.txt 
11.
pc.txt 
12.
sg.txt 
13.
x.txt --------> die Datei hat aber keine 2 Zeichen, sondern "bis zu 2 Zeichen, 2 Zeichen maximal"!
ABER:
Wenn Du nun alle Dateien mit GENAU 8 Zeichen brauchst:
[wieder Beispiel am CMD-Prompt /erste Zeile ist Eingabe/Rest Ausgabe]
01.
>set enableDelayedExpansion & for %i in (*.*) do @set "n=%~ni" & if "!n:~7!" NEQ "" if "!n:~8!"=="" @echo %i 
02.
alltest9.txt 
03.
Beispiel.asc 
04.
Beispiel.txt 
05.
Datetest.bat 
06.
datetest.js 
07.
Decrypt1.vbs 
08.
Decrypt2.vbs 
09.
dir2test.txt 
10.
eags_usr.ini 
11.
echotest.bat 
12.
ergebnis.csv 
13.
errlev10.cmd 
14.
FindRepl.exe 
15.
FindRepl.ini 
16.
forltest.bat 
17.
ipconfig.txt 
18.
Mit freundlichen Grüßenbiber.txt 
19.
 
Anmerkung: Bei mir ist "DelayedExpansion IMMER gesetzt via Registry. Das "SET EnableDelayedExpansion & " ist bei mir also nicht nötig - aber bei M$-Werkseinstellung.
Dann geht es so.

Grüße
Biber
Bitte warten ..
Mitglied: mexx
11.06.2009 um 11:53 Uhr
Mensch Biber, kurzfristig trifft es, aber einfach is des net. Ich ziehe den Hut. Kann mit der eile gar nix anfangen. Setzt Du eine Variable mit Funktionsaufruf?
Bitte warten ..
Mitglied: bastla
11.06.2009 um 11:59 Uhr
@mexx
Eigentlich macht Biber das etwa so:
01.
@echo off & setlocal 
02.
 
03.
for %%i in (31*.*) do call :ProcessFile "%%i" 
04.
goto :eof 
05.
 
06.
:ProcessFile 
07.
set "Name=%~n1" 
08.
if "%Name:~8%" neq "" goto :eof 
09.
if "%Name:~7%"=="" goto :eof 
10.
echo Der Name von %1 ist genau 8 Zeichen lang. 
11.
goto :eof
- nur ein klein wenig kompakter ...

Grüße
bastla
Bitte warten ..
Mitglied: paulepank
11.06.2009 um 12:01 Uhr
Hallo hier,

oder ein anderer Weg nach Rom
01.
dir /b 31*.* | findstr "31......\..*"
Einschränkung:es muß eine Dateierweiterung geben.

cu paulepank
Bitte warten ..
Mitglied: bastla
11.06.2009 um 12:05 Uhr
... und Einschränkung 2: Es sollte keinen Dateinamen geben, der an der 9. Stelle einen Punkt hat.

Grüße
bastla
Bitte warten ..
Mitglied: paulepank
11.06.2009 um 12:15 Uhr
ja das ist mir eben auch aufgefallen
Bitte warten ..
Mitglied: Pegasus37
11.06.2009 um 18:14 Uhr
An alle vielen Dank für die umfangreichen Workarounds.
Da meine Dateinamen ausschließlich aus Ziffern bestehen, ist mir mit der Längenabfrage des Namens schon sehr geholfen.
Nochmals vielen Dank.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Netzwerk
Windows Server 2003 SBS Netzwerk durch neuen Server Ersetzen (4)

Frage von MultiStorm zum Thema Windows Netzwerk ...

Exchange Server
gelöst Microsoft Excange Server 2007 auf Windows Server 2003 Installieren? (9)

Frage von Herbrich19 zum Thema Exchange Server ...

Windows Server
gelöst Suche Windows Server 2003 Enterprise ISO (8)

Frage von Herbrich19 zum Thema Windows Server ...

Server
gelöst Client bei Windows Server 2003 ändern (5)

Frage von Therealcookie zum Thema Server ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...