С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
142 / 68 / 4
Регистрация: 23.06.2010
Сообщений: 155

Замена символов в значении переменной

27.07.2012, 12:03. Показов 3654. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код который работал без помех (даты изымаемые из имени файла я в примере опустил).

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Echo off
 
REM Обрабатываем все файлы типа *.---
For %%a In ( ^
S:\MAILBOX\000\R\000???.--- ^
S:\MAILBOX\001\R\001???.--- ^
S:\MAILBOX\003\R\003???.--- ^
S:\MAILBOX\005\R\005???.--- ^
S:\MAILBOX\015\R\015???.--- ^
S:\MAILBOX\019\R\019???.--- ^
S:\MAILBOX\037\R\037???.--- ^
S:\MAILBOX\039\R\039???.--- ^
S:\MAILBOX\043\R\043???.--- ^
S:\MAILBOX\047\R\047???.--- ^
S:\MAILBOX\048\R\048???.--- ^
S:\MAILBOX\049\R\049???.--- ^
S:\MAILBOX\050\R\050???.--- ^
S:\MAILBOX\051\R\051???.--- ^
S:\MAILBOX\052\R\052???.--- ^
S:\MAILBOX\053\R\053???.---) Do @Call :move_Y_M_D %%~na %%~fa
GoTo :EOF
 
REM Собственно процедура раскладки по каталогам
:move_Y_M_D
 
REM Первым параметром передаем только имя файла
SET f_Name=%1
 
REM Выделяем с имени файла символы номера филиала, года, месяца и дня
SET g_Fil=%f_Name:~1,2%
SET f_Fil=%f_Name:~0,3%
 
COPY S:\MAILBOX\%f_Fil%\*.--- P:\SERVER%g_Fil%\%f_Fil%\IN\*.---
Так вот папка назначения изменилась, так как филиал изменил номер, но и номер старый тоже остался в пути. Пример: Был путь p:\SERVER03\003\IN\ где 03 и 003 это номер филиала изымаемый из файла 003R5P.---. Теперь файлы поступают 136R7Q.---, где 136 это его новый номер, соответственно путь новый теперь p:\SERVER03\136\IN\. Что-то использование нового и старого номера у меня теперь не прокатывает. Пробую:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
REM Назначим СТАРЫЙ номер филиала для каталога
SET o_Fil=%f_Fil:134=00%
SET o_Fil=%f_Fil:135=01%
SET o_Fil=%f_Fil:136=03%
SET o_Fil=%f_Fil:137=05%
SET o_Fil=%f_Fil:138=15%
SET o_Fil=%f_Fil:139=19%
SET o_Fil=%f_Fil:140=37%
SET o_Fil=%f_Fil:141=39%
SET o_Fil=%f_Fil:142=43%
SET o_Fil=%f_Fil:143=47%
SET o_Fil=%f_Fil:144=48%
SET o_Fil=%f_Fil:145=49%
SET o_Fil=%f_Fil:146=50%
SET o_Fil=%f_Fil:147=51%
SET o_Fil=%f_Fil:148=52%
SET o_Fil=%f_Fil:149=53%
 
COPY S:\MAILBOX\%o_Fil%\*.--- P:\SERVER%g_Fil%\%f_Fil%\IN\*.---
Возвращает %o_Fil% все равно 136 номер филиала. Направьте на путь к истине.

Не по теме:

Кондиционер не справляется, в голову печет, мысли сварились.

1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.07.2012, 12:03
Ответы с готовыми решениями:

Замена символов в значении переменной
Доброго времени суток! Есть два файла: 1. config.ini: 2. backup.bat:

Замена определённого символа в значении переменной другим
Здравствуйте, можно ли считать фразу из txt файла в переменную и в переменной в этой фразе заменить определённый символ? на всякий случай...

Замена в значении переменной определённого символа символом процента
Есть выражение типа: set x=23/3 rem хочу заменить знак деления set y=%x:/=%% echo %y% В результате получается 233%, но если...

8
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.07.2012, 23:58
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SET o_Fil=%g_Fil:00=134%
SET o_Fil=%g_Fil:01=135%
SET o_Fil=%g_Fil:03=136%
SET o_Fil=%g_Fil:05=137%
SET o_Fil=%g_Fil:15=138%
SET o_Fil=%g_Fil:19=139%
SET o_Fil=%g_Fil:37=140%
SET o_Fil=%g_Fil:39=141%
SET o_Fil=%g_Fil:43=142%
SET o_Fil=%g_Fil:47=143%
SET o_Fil=%g_Fil:48=144%
SET o_Fil=%g_Fil:49=145%
SET o_Fil=%g_Fil:50=146%
SET o_Fil=%g_Fil:51=147%
SET o_Fil=%g_Fil:52=148%
SET o_Fil=%g_Fil:53=149%
 
echo COPY S:\MAILBOX\%f_Fil%\*.--- P:\SERVER%g_Fil%\%o_Fil%\IN\*.---
pause
COPY S:\MAILBOX\%f_Fil%\*.--- P:\SERVER%g_Fil%\%o_Fil%\IN\*.---
В команде копирования в маилбоксе каталог R не пропущен?
0
142 / 68 / 4
Регистрация: 23.06.2010
Сообщений: 155
30.07.2012, 10:19  [ТС]
Да, пропущен. Это был пример пути (лишнее подрезал), но сути не меняет. К примеру опустим копирование а просто сделаем вывод полученного на экран. Echo %g_Fil% и Echo %o_Fil% покажут одно и тоже значение.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
30.07.2012, 13:22
Ну, дак Вы мой код пробовали выполнить? Там у Вас:
1) переменная не та была подставлена (в двух местах)
2) значения до и после двоеточия поменять местами.

У меня все работает в точности как Вы написали задание.
0
142 / 68 / 4
Регистрация: 23.06.2010
Сообщений: 155
30.07.2012, 15:41  [ТС]
Лыжи не едут.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
@echo off
 
REM Первым параметром передаем только имя файла
SET f_Name=%1
 
REM Выделяем с имени файла символы номера филиала, года, месяца и дня
SET g_Fil=%f_Name:~1,2%
SET f_Fil=%f_Name:~0,3%
SET f_Year=%f_Name:~3,1%
SET f_Month=%f_Name:~4,1%
SET f_Day=%f_Name:~5,1%
 
REM Назначим СТАРЫЙ номер филиала 2 символа
SET o_Fil=%g_Fil:00=134%
SET o_Fil=%g_Fil:01=135%
SET o_Fil=%g_Fil:03=136%
SET o_Fil=%g_Fil:137=05%
SET o_Fil=%g_Fil:15=138%
SET o_Fil=%g_Fil:19=139%
SET o_Fil=%g_Fil:37=140%
SET o_Fil=%g_Fil:39=141%
SET o_Fil=%g_Fil:43=142%
SET o_Fil=%g_Fil:47=143%
SET o_Fil=%g_Fil:48=144%
SET o_Fil=%g_Fil:49=145%
SET o_Fil=%g_Fil:50=146%
SET o_Fil=%g_Fil:51=147%
SET o_Fil=%g_Fil:52=148%
SET o_Fil=%g_Fil:53=149%
 
REM Назначим СТАРЫЙ номер филиала 3 символа
SET o2_Fil=%f_Fil:000=134%
SET o2_Fil=%f_Fil:001=135%
SET o2_Fil=%f_Fil:003=136%
SET o2_Fil=%f_Fil:137=005%
SET o2_Fil=%f_Fil:015=138%
SET o2_Fil=%f_Fil:019=139%
SET o2_Fil=%f_Fil:037=140%
SET o2_Fil=%f_Fil:039=141%
SET o2_Fil=%f_Fil:043=142%
SET o2_Fil=%f_Fil:047=143%
SET o2_Fil=%f_Fil:048=144%
SET o2_Fil=%f_Fil:049=145%
SET o2_Fil=%f_Fil:050=146%
SET o2_Fil=%f_Fil:051=147%
SET o2_Fil=%f_Fil:052=148%
SET o2_Fil=%f_Fil:053=149%
 
echo %f_Name%
 
echo %g_Fil%
echo %f_Fil%
echo %f_Year%
echo %f_Month%
echo %f_Day%
 
echo %o_Fil%
echo %o2_Fil%
pause
Получаю
Code
1
2
3
4
5
6
7
8
9
137R6M.---
37
137
R
6
M
37
137
Для продолжения нажмите любую клавишу . . .
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
30.07.2012, 17:59
А что ожидали получить?
0
142 / 68 / 4
Регистрация: 23.06.2010
Сообщений: 155
30.07.2012, 18:14  [ТС]
игрался и ошибки в 17 и 35ой строке оставил, по вашему примеру должно быть так:
SET o_Fil=%g_Fil:05=137%
SET o2_Fil=%f_Fil:005=137%
Берем за пример файл 137R6M.--- получить должен:
echo %g_Fil% выведет 37
echo %f_Fil% даст 137
год, месяц, день тут все в порядке
echo %o_Fil% выведет 05
echo %o2_Fil% выведет 005
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
30.07.2012, 22:26
K0NCTANT1N, если нет заменяемого значения в переменной донара, новая переменная равна переменной донара. (сорри за косноязычие). В вашем случае, при %f_Name% равном 137R6M.--- , в 20 строке кода %o_Fil% равна 140, а в 21 строке %o_Fil% снова равна 37.

решение:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@echo off
SetLocal EnableDelayedExpansion
 
REM Первым параметром передаем только имя файла
SET f_Name=137R6M.---
 
REM Выделяем с имени файла символы номера филиала, года, месяца и дня
SET g_Fil=%f_Name:~1,2%
 
SET f_Fil=%f_Name:~0,3%
SET f_Year=%f_Name:~3,1%
SET f_Month=%f_Name:~4,1%
SET f_Day=%f_Name:~5,1%
 
REM Назначим СТАРЫЙ номер филиала 2 символа
if "%g_Fil%"=="00" SET o_Fil=%g_Fil:00=134%
if "%g_Fil%"=="01" SET o_Fil=%g_Fil:01=135%
if "%g_Fil%"=="03" SET o_Fil=%g_Fil:03=136%
if "%g_Fil%"=="137" SET o_Fil=%g_Fil:137=05%
if "%g_Fil%"=="15" SET o_Fil=%g_Fil:15=138%
if "%g_Fil%"=="19" SET o_Fil=%g_Fil:19=139%
if "%g_Fil%"=="37" set o_Fil=%g_Fil:37=140%
if "%g_Fil%"=="39" SET o_Fil=%g_Fil:39=141%
if "%g_Fil%"=="43" SET o_Fil=%g_Fil:43=142%
if "%g_Fil%"=="47" SET o_Fil=%g_Fil:47=143%
if "%g_Fil%"=="48" SET o_Fil=%g_Fil:48=144%
if "%g_Fil%"=="49" SET o_Fil=%g_Fil:49=145%
if "%g_Fil%"=="50" SET o_Fil=%g_Fil:50=146%
if "%g_Fil%"=="51" SET o_Fil=%g_Fil:51=147%
if "%g_Fil%"=="52" SET o_Fil=%g_Fil:52=148%
if "%g_Fil%"=="53" SET o_Fil=%g_Fil:53=149%
 
REM Назначим СТАРЫЙ номер филиала 3 символа
if "%f_Fil%"=="000" SET o2_Fil=%f_Fil:000=134%
if "%f_Fil%"=="001" SET o2_Fil=%f_Fil:001=135%
if "%f_Fil%"=="003" SET o2_Fil=%f_Fil:003=136%
if "%f_Fil%"=="137" SET o2_Fil=%f_Fil:137=005%
if "%f_Fil%"=="015" SET o2_Fil=%f_Fil:015=138%
if "%f_Fil%"=="019" SET o2_Fil=%f_Fil:019=139%
if "%f_Fil%"=="037" SET o2_Fil=%f_Fil:037=140%
if "%f_Fil%"=="039" SET o2_Fil=%f_Fil:039=141%
if "%f_Fil%"=="043" SET o2_Fil=%f_Fil:043=142%
if "%f_Fil%"=="047" SET o2_Fil=%f_Fil:047=143%
if "%f_Fil%"=="048" SET o2_Fil=%f_Fil:048=144%
if "%f_Fil%"=="049" SET o2_Fil=%f_Fil:049=145%
if "%f_Fil%"=="050" SET o2_Fil=%f_Fil:050=146%
if "%f_Fil%"=="051" SET o2_Fil=%f_Fil:051=147%
if "%f_Fil%"=="052" SET o2_Fil=%f_Fil:052=148%
if "%f_Fil%"=="053" SET o2_Fil=%f_Fil:053=149%
 
echo %f_Name%
 
echo g_Fil=%g_Fil%
echo f_Fil=%f_Fil%
echo f_Year=%f_Year%
echo f_Month=%f_Month%
echo f_Day=%f_Day%
 
echo o_Fil=%o_Fil%
echo o2_Fil=%o2_Fil%
pause
1
142 / 68 / 4
Регистрация: 23.06.2010
Сообщений: 155
31.07.2012, 12:27  [ТС]
Верно, спасибо. Код поправил, работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.07.2012, 12:27
Помогаю со студенческими работами здесь

Замена в значении переменной строки, содержащей знак равенства
Надо, например, заменить "a=b" на "с". Если делать так: @echo off set "x=<a=bx><a=by>" set "x=%x:*b=<c%" set...

Пробелы в значении переменной
@echo off if %1 == KhZ910U9 ( goto m1 ) else ( goto m2 ) :m1 set cor1=\install path echo %cor1% == %2

Как проверить наличие спецсимволов в значении переменной?
Как проверить наличие спецсимволов в переменной, которая будет использоваться для имени файла и заменить их на подходящие? Запрещеные...

В значении переменной TIME заменить все двоеточия и запятую на точки
Всем привет. Задача - в переменной %time% все двоеточия и запятые поменять на точки. как это можно сделать?

Удаление всех файлов и папок, кроме указанных в значении задаваемой переменной
rem очистка всего кроме папок rem ================================================================== setlocal enableextensions...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru