1

Тема: CMD/BAT: Получить расширение файла из переменной

С наступающим всех.

Голова под конец года не хочет работать. Проблема такая.

code.cmd

@echo %~x0

Выводит расширение с точкой:
.cmd

Как получить без точки?

Заранее благодарю.

Нас невозможно сбить с пути, нам пофигу куда идти.

2 (изменено: alexii, 2011-12-27 13:18:04)

Re: CMD/BAT: Получить расширение файла из переменной

set ext=%~x0
echo %ext:*.=%

echo %ext:~1%
Я конечно далек от мысли... (с)

3

Re: CMD/BAT: Получить расширение файла из переменной

Благодарю.

Нас невозможно сбить с пути, нам пофигу куда идти.

4

Re: CMD/BAT: Получить расширение файла из переменной

Еще вопросец в продолжении темы. Совсем не догоняю почему так.

Есть папка в которой лежит 2 файла.

set.txt
script.cmd

@for /f "tokens=*" %%a in ('dir *.* /b') do @(
    set ext=%%~xa
    echo %ext:~1%
)

Во лог команд консоли:

c:\tmp>script.cmd
~1
~1

c:\tmp>script.cmd
txt
txt

c:\tmp>ren set.txt set.log

c:\tmp>script.cmd
txt
txt

c:\tmp>script.cmd
log
log

Вопросы. возникли.
Почему при первом запуске получается ~1?
Почему выводится расширение только txt файла?
Почему после переименования, батник только со 2 раза начинает догадываться, что-то тут не так?

Кажется мне почему то что я глупости пишу тут. Но прошу, если не охота объяснять, хотя бы ткните в правильную страницу мануала.

Нас невозможно сбить с пути, нам пофигу куда идти.

5

Re: CMD/BAT: Получить расширение файла из переменной

Прочел внимательней set /?, ошибку свою понял. Но пока не понимаю как правильно написать код.

Нас невозможно сбить с пути, нам пофигу куда идти.

6

Re: CMD/BAT: Получить расширение файла из переменной

Сообразил код.

@for /f "tokens=*" %%a in ('dir *.* /b') do @(
    set ext=%%~xa
    echo !ext:~1!

Но работает только если запустить cmd.exe /v

Если же просто запустить батник, то код не отрабатывает. Тоска печаль.

Нас невозможно сбить с пути, нам пофигу куда идти.

7

Re: CMD/BAT: Получить расширение файла из переменной

Ура все получилось.

@setlocal enabledelayedexpansion
@for /f "tokens=*" %%a in ('dir *.* /b') do @(
    set ext=%%~xa
    echo !ext:~1!
)

Спасибо всем, кто принял участие в теме.

Нас невозможно сбить с пути, нам пофигу куда идти.

8 (изменено: Rumata, 2011-12-27 12:24:45)

Re: CMD/BAT: Получить расширение файла из переменной

А вот еще один баг. Создайте файл без расширения. Запустите скрипт. Посмотрите результат.

Лечится так:

if defined ext echo !ext:~1!

Это не проблема расширения. Это проблема интерпретатора командной строки - раскрытие значения несуществующей переменной.

( 2 * b ) || ! ( 2 * b )

9 (изменено: DnsIs, 2011-12-27 13:37:39)

Re: CMD/BAT: Получить расширение файла из переменной

Спс за дополнение.

Суть батника была такая (с учетом ваших дополнений):

@setlocal enabledelayedexpansion
@for /f "tokens=*" %%a in ('dir *.* /b') do @(
    set ext=%%~xa
    set str=
    if defined ext set str= [!ext:~1!]
    "c:\Program Files\7-Zip\7z.exe" a -r -t7z "%%~na!str!.7z" "%%a"
)

Жать все файлы и папки в текущей директории, добавляя расширение в имя архива.

Нас невозможно сбить с пути, нам пофигу куда идти.

10

Re: CMD/BAT: Получить расширение файла из переменной

То есть Вам надо получить не просто filename.ext.7z, а именно filename[ext].7z. Полагаю, что в строке

str= [!ext:~1!]

опечатка и пробела после знака равенства быть не должно. Или Вам нужен именно такой результат filename [ext].7z? В таком случае существует небольшая вероятность получить файл с ведущим пробелом в начале имени файла, если исходный файл будет без имени, например .ext.

( 2 * b ) || ! ( 2 * b )

11 (изменено: DnsIs, 2011-12-27 16:43:07)

Re: CMD/BAT: Получить расширение файла из переменной

Да да, пробел нужен. Мне так удобней. А пустых имен нету, потому как, в ручном режиме все проверяю.
Книжки электронные решил, к одному виду привести. А то все как попало, разными архиваторами упакованные, названия, авторы, рус/анл...
Так что в таком виде код вполне устраивает. Отрабатывает без глюков. Спс.

То есть Привожу к виду:

Учение дона Хуана.txt
Путешествие в Икстлан.rtf

Переконвертить в

Учение дона Хуана [txt].7z
Путешествие в Икстлан [rtf].7z

и тд...

Нас невозможно сбить с пути, нам пофигу куда идти.