Mithilfe eines Batch-Skripts gehe ich in den Ordner und in diesem Ordner habe ich verschiedene Dateien wie -
ABc.txt
Pqr.png
.
.
Test-1.2.0.zip
Aus diesen Dateien möchte ich den Namen einer Datei erhalten, die mit beginnt Test
und die Erweiterung hat .zip
. In diesem Fall Test-1.2.0.zip
. Da die Version dynamisch sein könnte.
Können Sie mir bitte mit dem Batch-Skript helfen, es zu finden Test-1.2.0.zip
und als Ausgabe zurückzugeben?
Antwort1
Klicken Sie mit der rechten Maustaste auf das Windows-Logo in der Startleiste, wählen Sie „Ausführen“ aus der Liste und öffnen Sie es. Geben Sie dann das Wort „Zuletzt verwendet“ ein und klicken Sie auf „OK“. Es wird ein Ordner mit den zuletzt verwendeten Dateien auf Ihrem Laptop geöffnet. Versuchen Sie, darin nach Ihrer Datei zu suchen.
Antwort2
Versuchen Sie es mit einer For /F
Schleife mit:
where .:Strings/Characters+Wildcard+String/Characters
Der where
Befehl nimmt "."
als wörtliches Zeichen an, nicht als Regex 1 Ziffer/Zeichen:
1 Digit/character <==> ?
1 or More Digit/Character <==> *
Test- 1 Digit/Character . 1 Digit/Character . 1 Digit/Character.zip <==> Test-?.?.?.zip
Test- 1 Digit/Character . 1 Digit/Character . 1 or More Digit/Character: <==> Test-?.?.*.zip
- Benutzen
For /F
mit (%%~nxi
Nbin eXSpannung)
@echo off
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.?.zip"`)do echo\%%~nxi
- Für Powershell:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.?.zip'} | Select-Object -ExpandProperty Name
# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.?.zip'} |select -Exp Name
- Ergebnisse:
Test-1.2.0.zip
Test-1.2.1.zip
Test-1.2.2.zip
Test-1.2.3.zip
Test-1.2.4.zip
Test-1.2.5.zip
Test-1.2.6.zip
Test-1.2.7.zip
Test-1.2.8.zip
Test-1.2.9.zip
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"`)do echo\%%~nxi
- Für Powershell:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.*.zip'} | Select-Object -ExpandProperty Name
# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.*.zip'} |select -Exp Name
- Ergebnisse:
Test-1.2.0.zip
Test-1.2.1.zip
Test-1.2.10.zip
Test-1.2.11.zip
Test-1.2.12.zip
Test-1.2.13.zip
Test-1.2.14.zip
Test-1.2.15.zip
Test-1.2.16.zip
Test-1.2.17.zip
Test-1.2.18.zip
Test-1.2.19.zip
Test-1.2.2.zip
Test-1.2.20.zip
Test-1.2.3.zip
Test-1.2.4.zip
Test-1.2.5.zip
Test-1.2.6.zip
Test-1.2.7.zip
Test-1.2.8.zip
Test-1.2.9.zip
- FürReverseSortierenim cmd/bat-Code verwenden , für PowerShell hinzufügen
for ... ^| Sort /r`) do ...
| Sort-Object -Descending
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"^|sort /r`)do echo\%%~nxi
- Für Powershell:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.*.zip'} | Select-Object -ExpandProperty Name | Sort-Object -Descending
# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.*.zip'} |select -Exp Name | Sort -Des
- Ergebnisse:
Test-1.2.9.zip
Test-1.2.8.zip
Test-1.2.7.zip
Test-1.2.6.zip
Test-1.2.5.zip
Test-1.2.4.zip
Test-1.2.3.zip
Test-1.2.20.zip
Test-1.2.2.zip
Test-1.2.19.zip
Test-1.2.18.zip
Test-1.2.17.zip
Test-1.2.16.zip
Test-1.2.15.zip
Test-1.2.14.zip
Test-1.2.13.zip
Test-1.2.12.zip
Test-1.2.11.zip
Test-1.2.10.zip
Test-1.2.1.zip
Test-1.2.0.zip
Antwort3
@echo off
for /f useback^tokens^=* %%i in (`where .:"temp-?.?.*.tar.gz"`)do echo\%%~nxi
diese Lösung hat bei mir im Batch-Skript funktioniert
?stellt 1 Ziffer/Zeichen dar undStern(*)char steht für eine oder mehrere Ziffern/Zeichen