Используя пакетный скрипт, я захожу в папку, а в ней у меня есть разные файлы, например:
ABc.txt
Pqr.png
.
.
Test-1.2.0.zip
Из этих файлов я хочу получить имя файла, который начинается с Test
и имеет расширение .zip
. В этом случае Test-1.2.0.zip
. Так как его версия может быть динамической.
Не могли бы вы помочь мне с пакетным скриптом для поиска Test-1.2.0.zip
и возврата в качестве вывода?
решение1
Щелкнув правой кнопкой мыши по логотипу Windows в панели пуска, выберите "Выполнить" из списка и откройте его. Затем напишите это слово "недавние" и нажмите ОК. Это откроет недавнюю папку на вашем ноутбуке, попробуйте поискать в ней ваш файл.
решение2
Попробуйте использовать For /F
цикл с:
where .:Strings/Characters+Wildcard+String/Characters
Команда where
предполагает "."
, что это буквальный символ, а не Regex 1 цифра/символ:
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
- Использовать
For /F
с (%%~nxi
Наме еИксНапряжение)
@echo off
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.?.zip"`)do echo\%%~nxi
- Для 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
- Полученные результаты:
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
- Для 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
- Полученные результаты:
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
- ДлярнаоборотСортироватьиспользовать в коде cmd/bat, для PowerShell добавить
for ... ^| Sort /r`) do ...
| Sort-Object -Descending
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"^|sort /r`)do echo\%%~nxi
- Для 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
- Полученные результаты:
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
Дополнительное чтениеcmd/летучая мышь
решение3
@echo off
for /f useback^tokens^=* %%i in (`where .:"temp-?.?.*.tar.gz"`)do echo\%%~nxi
это решение сработало для меня в пакетном скрипте
?представляет собой 1 цифру/символ извезда(*)char представляет 1 или более цифр/символов