Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
K0NCTANT1N
139 / 65 / 3
Регистрация: 23.06.2010
Сообщений: 151
1

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

27.07.2012, 12:03. Просмотров 1878. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2012, 12:03
Ответы с готовыми решениями:

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

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

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

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

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

8
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
27.07.2012, 23:58 2
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
K0NCTANT1N
139 / 65 / 3
Регистрация: 23.06.2010
Сообщений: 151
30.07.2012, 10:19  [ТС] 3
Да, пропущен. Это был пример пути (лишнее подрезал), но сути не меняет. К примеру опустим копирование а просто сделаем вывод полученного на экран. Echo %g_Fil% и Echo %o_Fil% покажут одно и тоже значение.
0
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
30.07.2012, 13:22 4
Ну, дак Вы мой код пробовали выполнить? Там у Вас:
1) переменная не та была подставлена (в двух местах)
2) значения до и после двоеточия поменять местами.

У меня все работает в точности как Вы написали задание.
0
K0NCTANT1N
139 / 65 / 3
Регистрация: 23.06.2010
Сообщений: 151
30.07.2012, 15:41  [ТС] 5
Лыжи не едут.
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
Получаю
Код
137R6M.---
37
137
R
6
M
37
137
Для продолжения нажмите любую клавишу . . .
0
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
30.07.2012, 17:59 6
А что ожидали получить?
0
K0NCTANT1N
139 / 65 / 3
Регистрация: 23.06.2010
Сообщений: 151
30.07.2012, 18:14  [ТС] 7
игрался и ошибки в 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
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
30.07.2012, 22:26 8
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
K0NCTANT1N
139 / 65 / 3
Регистрация: 23.06.2010
Сообщений: 151
31.07.2012, 12:27  [ТС] 9
Верно, спасибо. Код поправил, работает.
0
31.07.2012, 12:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2012, 12:27

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

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

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


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

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

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