Как я могу подавить расширения имен файлов в интерпретаторе командной строки и пакетных файлах?

Пример: у меня есть файл: FILENAME.EXT, и я хочу извлечь FILENAME без расширения .EXT. Я хочу иметь возможность использовать имя файла без расширения для команды, которая принимает только имена файлов без их расширений. У меня есть утилита BCHECK, которая принимает в качестве аргумента имя файла без расширений. Используя BCHECK*. не работает, потому что все файлы имеют расширения .DAT или .IDX. Эти файлы постоянно переименовываются, поэтому мне нужно предоставить BCHECK новые имена файлов без необходимости вводить их вручную.


person Frank R.    schedule 07.08.2010    source источник
comment
Удаление тега unix, поскольку это касается только пакетных файлов DOS/Windows.   -  person David    schedule 07.08.2010
comment
@David: Мое приложение работает как в UNIX, так и в DOS, поэтому мне нужно знать для обоих.   -  person Frank R.    schedule 07.08.2010
comment
Будет ли basename работать на Unix?   -  person Gabe    schedule 07.08.2010
comment
Интересно, что первый пакетный вопрос, который я вижу, относится к DOS, а теперь и к пакетным файлам Windows.   -  person Joey    schedule 09.08.2010


Ответы (2)


Команда Unix для этого — basename.

person Gabe    schedule 07.08.2010

Для пакетных файлов DOS вы можете посмотреть параметры здесь. Например, следующая команда отображает имя файла без расширения для параметра 0, который является именем пакетного файла.

echo %~n0

ОБНОВЛЕНИЕ:
Вот пример, который можно добавить в пакетный файл.

FOR %%f IN (*.dat) DO bcheck -y %%~nf

Эта команда запустит bcheck -y BASENAME для каждого файла с расширением .dat в текущем каталоге. Команда представляет собой цикл for, который содержит параметр %%f. Параметр %%f содержит полное имя файла. Для каждого файла, соответствующего *.dat, будет выполняться команда после ключевого слова DO. %%~nf указывает на использование базового имени (~n) из параметра (%%f).

person bobs    schedule 07.08.2010
comment
@bobs: Это не сработало в DOS 6.22. У меня есть около 30 файлов с расширениями .DAT в каталоге C:\DBFILES.. У меня есть утилита BCHECK.EXE, которой в качестве аргумента требуется базовое имя 30 файлов .DAT. файлы, пример: 'bcheck -y BASENAME', можете ли вы предоставить мне рабочий пример? - person Frank R.; 07.08.2010
comment
@bobs: Нет, это тоже не сработало в пакетном сценарии, bcheck ответил: Файл %~nf не найден. Помните, что это Pure DOS 6.22, а не командный интерпретатор Windows cmd.exe. - person Frank R.; 07.08.2010
comment
@bobs: Есть ли способ подписать имя файла 8.3, например [1,8]? - person Frank R.; 07.08.2010
comment
@ Фрэнк, нет, нет. По крайней мере, не в DOS. - person Joey; 09.08.2010
comment
Итак, я просмотрел несколько пакетных утилит и трюков для DOS на MGD и других веб-сайтах, связанных с DOS, но ни один из них не работает!.. Кто-нибудь может придумать умный способ запуска утилиты, которая принимает в качестве аргумента базовые имена всех файлов в пределах каталог? - person Frank R.; 09.08.2010