Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/35: Рейтинг темы: голосов - 35, средняя оценка - 4.77
elena_ves
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 7
1

Присвоить переменной значение, являющееся частью имени файла

18.09.2014, 18:33. Просмотров 6453. Ответов 18
Метки нет (Все метки)

Есть файл rtbr-db-5.11.17.125.fdb, нужно присвоить переменной %version% значение 5.11.17.125, при этом часть имени файла rtbr-db- всегда постоянна, как и расширение, меняются только цифры и их количество. Подскажите, кто знает.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2014, 18:33
Ответы с готовыми решениями:

Присвоить переменной значение, являющееся целой строкой, считанной из текстового файла
День добрый всем:) Есть небольшой код: for /f "UsebackQ skip=%a%" %%A IN ("keyPS.txt") do (set...

Переименовать папку в имя, являющееся частью имени одного из файлов, находящихся в этой папке
Прошу помощи... Имеется около тысячи папок с разными именами. В каждой папке по несколько pdf...

Можно ли присвоить значение переменной из файла
Дело в том что сортировка функции random считает числа символами, а можно ли сделать так set /a...

Прочитать значение файла и присвоить его переменной
Подскажите как реализовать с помощи консоли: В рамках запущенной консоли считать значение из...

Разложить файлы по папкам с именами, являющимися частью имени файла - CMD/BAT
Привет. Помогите пожалуйста!!! Есть WIN7 папка F:\PIC в ней 4000 фото =) Файлы:...

18
quwy
Native x86
3343 / 2190 / 649
Регистрация: 13.02.2013
Сообщений: 7,242
18.09.2014, 18:38 2
Bash
1
2
3
4
set FILENAME=rtbr-db-5.11.17.125.fdb
set VERSION=%FILENAME:~8%
set VERSION=%VERSION:~0,-4%
echo %VERSION%
0
elena_ves
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 7
18.09.2014, 18:46  [ТС] 3
Отказалась от подобного решения, т.к. имя файла не постоянно. Нужен другой способ.
0
quwy
Native x86
3343 / 2190 / 649
Регистрация: 13.02.2013
Сообщений: 7,242
18.09.2014, 18:54 4
Цитата Сообщение от elena_ves Посмотреть сообщение
Отказалась от подобного решения, т.к. имя файла не постоянно. Нужен другой способ.
Что значит не постоянно? Решение полностью соответствует вашему условию, а откуда берется имя файла -- дело десятое. Что вам конкретно нужно?
0
18.09.2014, 18:54
Eva Rosalene
Ladybug
4124 / 1598 / 304
Регистрация: 06.01.2013
Сообщений: 4,193
Завершенные тесты: 2
18.09.2014, 18:56 5
elena_ves, да ну? Первые 8 символов постоянны, как и последние четыре - если верить ТЗ. Так что всё будет работать при любом количестве чисел.
0
elena_ves
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 7
18.09.2014, 19:19  [ТС] 6
Вы правы, только нужно, чтобы скрипт работал без предварительного редактирования батника и прописывания имени файла в значение переменной.
0
Eva Rosalene
Ladybug
4124 / 1598 / 304
Регистрация: 06.01.2013
Сообщений: 4,193
Завершенные тесты: 2
18.09.2014, 19:24 7
elena_ves,
Bash
1
2
set "FILENAME=%~1"
set "VERSION=%FILENAME:~8,-4%"
0
quwy
Native x86
3343 / 2190 / 649
Регистрация: 13.02.2013
Сообщений: 7,242
18.09.2014, 19:28 8
Цитата Сообщение от elena_ves Посмотреть сообщение
Вы правы, только нужно, чтобы скрипт работал без предварительного редактирования батника и прописывания имени файла в значение переменной.
Так откуда все-таки должно браться имя? Можно брать из командной строки батника:
Bash
1
2
3
4
set FILENAME=%1
set VERSION=%FILENAME:~8%
set VERSION=%VERSION:~0,-4%
echo %VERSION%
0
elena_ves
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 7
18.09.2014, 21:23  [ТС] 9
Имя нужно получить командой (какой лучше?), а потом взять из имени цифренную часть и присвоить переменной. Как сделать второе, я уже поняла.
0
quwy
Native x86
3343 / 2190 / 649
Регистрация: 13.02.2013
Сообщений: 7,242
18.09.2014, 21:50 10
Лучший ответ Сообщение было отмечено elena_ves как решение

Решение

Цитата Сообщение от elena_ves Посмотреть сообщение
Имя нужно получить командой
Ну как-то так:
Bash
1
2
3
4
5
6
7
8
@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%i in (rtbr-db-*.fdb) do (
  set FILENAME=%%i
  set VERSION=!FILENAME:~8!
  set VERSION=!VERSION:~0,-4!
  echo !VERSION!
)
1
elena_ves
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 7
20.09.2014, 11:30  [ТС] 11
quwy, спасибо, данное решение подошло, работает так, как надо. Всех благодарю за участие.
0
04173сс
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
15.06.2017, 12:18 12
quwy скажите пожалуйста этот bat нужно как я понимаю запускать из той же папки, а как запустить его из любой папки или прописать путь где он должен быть запущен?
0
alpap
2206 / 1494 / 505
Регистрация: 26.04.2015
Сообщений: 5,061
15.06.2017, 13:18 13
04173сс,
чаще нужен путь не к папке с bat (%~dp0), а к папке в которой лежит что-то к чему путь указывать не хочется или неудобно, тогда заранее надо этот путь взять в переменную или сразу записать
Windows Batch file
1
2
3
4
::set "s_path=Диск:\Нужная папка"
::cd /d "%s_path%"
cd /d "Диск:\Нужная папка"
::Команды для работы с именами файлов в этой папке уже без указания пути
Добавлено через 2 минуты
Цитата Сообщение от 04173сс Посмотреть сообщение
как запустить его из любой папки
да, и еще один старый проверенный банальный способ это bat в нужную папку, ярлык на bat и запуск по ярлыку оттуда куда (ярлык) положите.
1
04173сс
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
15.06.2017, 14:12 14
Мой вариант:
Windows Batch file
1
2
3
4
5
6
7
8
setlocal ENABLEDELAYEDEXPANSION
for %%i in (\\10.100.21.58\d\ftp\UHF\FOTO\Test_log\%dir%\After_Stress_test_*.txt) do (
  set FILENAME=%%i
  set VERSION=!FILENAME:~65!
  set VERSION=!VERSION:~0,-4!
  echo !VERSION!
)
ren \\10.100.21.106\d\ftp\HTC\FOTO\Test_log\%dir%\*.png !VERSION!.png
0
alpap
2206 / 1494 / 505
Регистрация: 26.04.2015
Сообщений: 5,061
15.06.2017, 14:23 15
04173сс,
если честно - в корне неправильно (и что такое %dir%, нет нигде)
что угодно может поменяться в пути (число символов имеется ввиду), поэтому надо выходить именно на имя файла, например
Windows Batch file
1
2
3
4
5
6
7
set "s_path=(\\10.100.21.58\d\ftp\UHF\FOTO\Test_log\%dir%"
if exist "%s_path%" cd /d "%s_path%"
for %%a in (After_Stress_test_*.txt) do (
 echo %%a
 rem Ну и так далее
 ren "%s_path%\*.png" "!VERSION!.png"
)
0
04173сс
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
15.06.2017, 17:11 16
alpap, В пути ничего не меняется. Поэтому взял этот вариант просто конечно. %dir% это переменная запрашиваемая у пользователя (имя каталога) Сорри не весь код скопировал
0
alpap
2206 / 1494 / 505
Регистрация: 26.04.2015
Сообщений: 5,061
15.06.2017, 17:25 17

Не по теме:

Цитата Сообщение от 04173сс Посмотреть сообщение
В пути ничего не меняется
сегодня, а завтра 10.100.21.58 станет 10.100.211.58 и что, редактировать?



Добавлено через 1 минуту
Цитата Сообщение от 04173сс Посмотреть сообщение
%dir% это переменная запрашиваемая у пользователя
и, позвольте, запрашиваемая у пользователя, это по вашему не меняется?
0
04173сс
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
15.06.2017, 17:31 18
Пользователь вводит всегда одинаковое количество символов. 6 знаков. Это уже учтено. И ip не измениться. Его прописали намертво.)

Добавлено через 2 минуты
Может вы и правы. Но я сделал так и мне этот вариант подходит и все работает.
0
alpap
15.06.2017, 17:46     Присвоить переменной значение, являющееся частью имени файла
  #19

Не по теме:

Цитата Сообщение от 04173сс Посмотреть сообщение
Это уже учтено. И ip не измениться
ну коли так - дело ваше, а мое было предупредить, как говорится: "А случаи бывают разные"

0
15.06.2017, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2017, 17:46
Привет! Вот еще темы с ответами:

Присвоить переменной значение, взятое из буфера обмена
Случайно не подскажите как присвоить переменной команду getclip (вставка из буфера обмен) или...

Как присвоить переменной содержимое текстового файла?
На Batch ИМХО невозможно. Нет способа обращаться к строчке. PS Предлагаю разместить код...

Присвоить переменной значение, равное сумме продолжительностей двух видеофайлов
Короче интересует как узнать длительность пары видео и записать сумму в переменную ввиде "SET...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru