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

Создание BAT- и RDP-файлов

22.01.2016, 11:05. Просмотров 2062. Ответов 12
Метки нет (Все метки)

Добрый день!
Вопрос вот какой.
Нужно написать батник, который создает батник и конфигурацию подключения RDP, для автоматической закачки журналов с устройств на сервер. Устройств много, доступ к ним только через RDP. Делаю так подключаюсь по RDP, на удаленной машине запускается батник, который смотрит какие журналы есть на удаленной машине (дир в файл), затем удаляет последнюю строку из файла, так как мне не нужны журналы за текущий день, и затем недостающие журналы качает журналы на сервер и затем логофает машину.
Получается следующее:

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
62
63
64
65
66
67
68
69
@Echo Off
setlocal enabledelayedexpansion
set number=152356
set ip=10.10.10.0
 
> "1.txt" echo @echo off
>> "1.txt" echo setlocal enabledelayedexpansion
 
>> "1.txt" echo dir /b d:\logs\journal\*2016* ^>d:\!number!.txt
>> "1.txt" echo for /f "usebackq" %%%%i in ^("d:\!number!.txt"^) do ^(
>> "1.txt" echo set /a m+=1
>> "1.txt" echo ^)
>> "1.txt" echo ^(
>> "1.txt" echo for /f "usebackq delims=" %%%%i in ^("d:\!number!.txt^) do ^(
>> "1.txt" echo  set /a n+=1
>> "1.txt" echo  call echo %%%%n%%%%^|^>nul findstr /vxc:!m! ^&^& echo %%%%i
>> "1.txt" echo ^)^)^>.tmp
>> "1.txt" echo move .tmp ""d:\!number!.txt""^>nul
>> "1.txt" echo for /f %%%%j in ^(d:\!number!.txt^) do ( 
>> "1.txt" echo if not exist \\tsclient\q\jurnal\!number!\%%%%j  ^(
>> "1.txt" echo copy d:\logs\journal\%%%%j \\tsclient\q\jurnal\!number! ^&^& echo %%%%j
>> "1.txt" echo ^)^)
>> "1.txt" echo logoff
 
copy 1.txt 1.bat
 
> "tek.rdp" echo screen mode id:i:2
>> "tek.rdp" echo desktopwidth:i:1280
>> "tek.rdp" echo desktopheight:i:1024
>> "tek.rdp" echo session bpp:i:15
>> "tek.rdp" echo winposstr:s:0,3,180,263,828,770
>> "tek.rdp" echo compression:i:1
>> "tek.rdp" echo keyboardhook:i:1
>> "tek.rdp" echo audiocapturemode:i:0
>> "tek.rdp" echo videoplaybackmode:i:1
>> "tek.rdp" echo connection type:i:2
>> "tek.rdp" echo displayconnectionbar:i:1
>> "tek.rdp" echo disable wallpaper:i:1
>> "tek.rdp" echo allow font smoothing:i:0
>> "tek.rdp" echo allow desktop composition:i:0
>> "tek.rdp" echo disable full window drag:i:1
>> "tek.rdp" echo disable menu anims:i:1
>> "tek.rdp" echo disable themes:i:1
>> "tek.rdp" echo disable cursor setting:i:0
>> "tek.rdp" echo bitmapcachepersistenable:i:0
>> "tek.rdp" echo full address:s:!ip!
>> "tek.rdp" echo audiomode:i:0
>> "tek.rdp" echo redirectprinters:i:0
>> "tek.rdp" echo redirectcomports:i:0
>> "tek.rdp" echo redirectsmartcards:i:0
>> "tek.rdp" echo redirectclipboard:i:1
>> "tek.rdp" echo redirectposdevices:i:0
>> "tek.rdp" echo redirectdirectx:i:1
>> "tek.rdp" echo drivestoredirect:s:SYSTEM (C:);Atm на "nika" (Q:);
>> "tek.rdp" echo autoreconnection enabled:i:1
>> "tek.rdp" echo authentication level:i:0
>> "tek.rdp" echo prompt for credentials:i:0
>> "tek.rdp" echo negotiate security layer:i:1
>> "tek.rdp" echo remoteapplicationmode:i:0
>> "tek.rdp" echo alternate shell:s:\\tsclient\c\1.bat
>> "tek.rdp" echo shell working directory:s:
>> "tek.rdp" echo gatewayhostname:s:
>> "tek.rdp" echo gatewayusagemethod:i:4
>> "tek.rdp" echo gatewaycredentialssource:i:4
>> "tek.rdp" echo gatewayprofileusagemethod:i:0
>> "tek.rdp" echo promptcredentialonce:i:1
>> "tek.rdp" echo use redirection server name:i:0
>> "tek.rdp" echo use multimon:i:0
>> "tek.rdp" echo username:s:login
Проблема вот в этой строке
Windows Batch file
16
>> "1.txt" echo  call echo %%%%n%%%%^|^>nul findstr /vxc:!m! ^&^& echo %%%%i
Вместо переменной !m! он ничего не пишет, видимо подставляет значение которого нет, помогите исправить.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2016, 11:05
Ответы с готовыми решениями:

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

Создание .bat файлов
Народ, поделитесь мнением, с чего начать ? посоветуйте какие-нить ссылки плиз... буду оч...

Создание Bat Файлов.
Всем привет!:yahoo: Прошу помочь с заданием. Кто знает, и кому не трудно помочь... Помогите! 1й и...

создание .bat файлов
1.  В каталоге BATH создать файл part1.bat, содержащий следующие команды: а) не выводить команды...

Создание BAT файлов
6. Напишите командный файл, создающий текстовый файл, имя которого задается как параметр командного...

12
alpap
2421 / 1503 / 511
Регистрация: 26.04.2015
Сообщений: 5,078
22.01.2016, 13:27 2
Ой ли!
Вы видели сами свой трансформер? А стоило бы попробовать его собрать, проанализировать, а уже потом лезть за помощью:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
setlocal enabledelayedexpansion
dir /b d:\logs\journal\*2016* >d:\152356.txt
for /f "usebackq" %%i in ("d:\152356.txt") do (
set /a m+=1
) 
(   [Зачем скобка]
for /f "usebackq delims=" %%i in ("d:\152356.txt) do ( [Нет кавычки в скобках]
 set /a n+=1
 call echo %%n%%|>nul findstr /vxc: && echo %%i [После findstr /vxc: ничего нет, что искать?]
))>.tmp
move .tmp ""d:\152356.txt"">nul [.tmp надо бы в кавычки, а в ...txt лишняя пара]
for /f %%j in (d:\152356.txt) do ( 
if not exist \\tsclient\q\jurnal\152356\%%j  (
copy d:\logs\journal\%%j \\tsclient\q\jurnal\152356 && echo %%j [Что это?, если %%j файл, то выше 13стр надо ("d:\152356.txt"), но смысл, полагаю строки, тогда что копируется d:\logs\journal\%%j?]
))
logoff
то что у Вас получается, ничего не исправлял, просто замечания в [ ].

Добавлено через 8 минут
Цитата Сообщение от alpap Посмотреть сообщение
Windows Batch file
3
dir /b d:\logs\journal\*2016* >d:\152356.txt
, еще забыл в 3й строке выведет в файл имена подходящих как файлов так и папок, тут не знаю, может так и надо не разбирался, просто констатирую.

Добавлено через 4 минуты
Цитата Сообщение от ivanxam Посмотреть сообщение
на удаленной машине запускается батник
- а готовый нормальный рабочий собранный проверенный батник положить и (или) запустить, религия не позволяет?
0
ivanxam
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 9
22.01.2016, 13:55  [ТС] 3
alpap, согласен есть пара опечаток исправляю и поясню что делает данный батник.

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
@Echo Off
setlocal enabledelayedexpansion
set number=152356
set ip=10.10.10.0
 
[начинаем создние батника 1.bat т.е. данный кусок просто должен скопировать указанные строки в файл 1.txt]
[затем переименовав его в 1.bat] 
 
> "1.txt" echo @echo off
>> "1.txt" echo setlocal enabledelayedexpansion
>> "1.txt" echo dir /b d:\logs\journal\*2016* ^>d:\!number!.txt
>> "1.txt" echo for /f "usebackq" %%%%i in ^("d:\!number!.txt"^) do ^(
>> "1.txt" echo set /a m+=1
>> "1.txt" echo ^)
>> "1.txt" echo ^(
>> "1.txt" echo for /f "usebackq delims=" %%%%i in ^("d:\!number!.txt"^) do ^(
>> "1.txt" echo  set /a n+=1
>> "1.txt" echo  call echo %%%%n%%%%^|^>nul findstr /vxc:!m! ^&^& echo %%%%i
>> "1.txt" echo ^)^)^>.tmp
>> "1.txt" echo move .tmp ""d:\!number!.txt""^>nul
>> "1.txt" echo for /f %%%%j in ^(d:\!number!.txt^) do ^( 
>> "1.txt" echo if not exist \\tsclient\q\jurnal\!number!\%%%%j  ^(
>> "1.txt" echo copy d:\logs\journal\%%%%j \\tsclient\q\jurnal\!number! ^&^& echo %%%%j
>> "1.txt" echo ^)^)
>> "1.txt" echo logoff
copy 1.txt 1.bat

Я хочу получить файл 1.bat со следующим содержимым:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
setlocal enabledelayedexpansion
dir /b d:\logs\journal\*2016* >d:\152356.txt
for /f "usebackq" %%i in ("d:\152356.txt") do (
set /a m+=1
)
(
for /f "usebackq delims=" %%i in ("d:\!number!.txt") do (
 set /a n+=1
 call echo %%n%%|>nul findstr /vxc:!m! && echo %%i
))>.tmp
move .tmp ""d:\!number!.txt"">nul
for /f %%j in (d:\152356.txt) do ( 
if not exist \\tsclient\q\jurnal\152356\%%j  (
copy d:\logs\journal\%%j \\tsclient\q\jurnal\152356 && echo %%j
))
logoff
Все строки он копирует корректно и правильно подставляет переменную !number!. А переменную !m! мне надо чтобы не подставлял значение, а оставил именно "!m!". Пробовал писать так ^!m^! не помогает.
Сама процедура описанная в батнике работает и проверена, мне лишь надо чтобы этот батник создавался сам, и чтоб в нем менялись только !number! и !IP!, но это дело другое.
0
alpap
2421 / 1503 / 511
Регистрация: 26.04.2015
Сообщений: 5,078
22.01.2016, 13:57 4
Лучший ответ Сообщение было отмечено ivanxam как решение

Решение

ivanxam, тот код что вы выложили не соответствует тому что получается из "хотелки", она (ее часть) должна выглядеть как-то так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Echo On
setlocal enabledelayedexpansion
set number=152356
set ip=10.10.10.0
 
 > "1.txt" echo @echo off
>> "1.txt" echo setlocal enabledelayedexpansion 
>> "1.txt" echo dir /b "d:\logs\journal\*2016*" ^>"d:\!number!.txt"
>> "1.txt" echo for /f "usebackq" %%%%i in ^("d:\!number!.txt"^) do ^(
>> "1.txt" echo  set /a m+=1
>> "1.txt" echo  for /f "usebackq delims=" %%%%i in ^("d:\!number!.txt"^) do ^(
>> "1.txt" echo   set /a n+=1
>> "1.txt" echo   call echo %%%%n%%%%^|^>nul findstr /vxc:^^!m^^! ^&^& echo %%%%i
>> "1.txt" echo ^)^)^>".tmp"
>> "1.txt" echo ^>nul move ".tmp" "d:\!number!.txt"
>> "1.txt" echo for /f "usebackq" %%%%j in ^("d:\!number!.txt"^) do ( 
>> "1.txt" echo  if not exist "\\tsclient\q\jurnal\!number!\%%%%j" ^(
>> "1.txt" echo   copy "d:\logs\journal\%%%%j" "\\tsclient\q\jurnal\!number!" ^&^& echo %%%%j
>> "1.txt" echo ^)^)
>> "1.txt" echo exit /b
pause
.
1
22.01.2016, 13:57
ComSpec
3414 / 1958 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
22.01.2016, 13:59 5
Windows Batch file
16
>> "1.txt" echo  call echo %%%%n%%%%^|^>nul findstr /vxc:^^!m^^! ^&^& echo %%%%i
1
ivanxam
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 9
22.01.2016, 14:01  [ТС] 6
alpap, Спасибо! все ради этого: ^^!m^^!
0
vavun
10253 / 5404 / 849
Регистрация: 07.04.2013
Сообщений: 15,610
22.01.2016, 14:02 7
А не проще ли так создавать файл ?

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
@echo off
 
for /f "delims=[]" %%N in ('find /n ":NEW_FILE" ^<"%~f0"') do set /a num=%%N
more +%num% >"%~dp0This_is_the_file.txt" <"%~f0"
exit /b
 
 
:NEW_FILE
 
У лукоморья дуб зелёный;
Златая цепь на дубе том:
И днём и ночью кот учёный
Всё ходит по цепи кругом;
Идёт направо - песнь заводит,
Налево - сказку говорит.
Там чудеса: там леший бродит,
Русалка на ветвях сидит;
Там на неведомых дорожках
Следы невиданных зверей;
Избушка там на курьих ножках
Стоит без окон, без дверей;
Там лес и дол видений полны;
Там о заре прихлынут волны
На брег песчаный и пустой,
И тридцать витязей прекрасных
Чредой из вод выходят ясных,
И с ними дядька их морской;
Там королевич мимоходом
Пленяет грозного царя;
Там в облаках перед народом
Через леса, через моря
Колдун несёт богатыря;
В темнице там царевна тужит,
А бурый волк ей верно служит;
Там ступа с Бабою Ягой
Идёт, бредёт сама собой,
Там царь Кащей над златом чахнет;
Там русский дух... там Русью пахнет!
И там я был, и мёд я пил;
У моря видел дуб зелёный;
Под ним сидел, и кот учёный
Свои мне сказки говорил.
При этом любые переменные находящиеся после :NEW_FILE раскрываться не будут
2
ivanxam
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 9
22.01.2016, 14:04  [ТС] 8
vavun, о таком способе не знал. Действительно намного проще без заморочек с ^, %%%%
0
alpap
2421 / 1503 / 511
Регистрация: 26.04.2015
Сообщений: 5,078
22.01.2016, 14:07 9
Цитата Сообщение от vavun Посмотреть сообщение
При этом любые переменные находящиеся после :NEW_FILE раскрываться не будут
,
Цитата Сообщение от ivanxam Посмотреть сообщение
подставляет переменную !number!
, а ему как раз надо.
2
ivanxam
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 9
22.01.2016, 14:09  [ТС] 10
alpap,
Цитата Сообщение от alpap Посмотреть сообщение
а ему как раз надо.
действительно!
0
vavun
10253 / 5404 / 849
Регистрация: 07.04.2013
Сообщений: 15,610
22.01.2016, 14:33 11
Цитата Сообщение от alpap Посмотреть сообщение
а ему как раз надо
Точняк. А я за это зацепился
Цитата Сообщение от ivanxam Посмотреть сообщение
А переменную !m! мне надо чтобы не подставлял значение, а оставил именно "!m!". Пробовал писать так ^!m^! не помогает.
0
alpap
22.01.2016, 14:45
  #12

Не по теме:

vavun, а так вообще классная вещица, возьму на вооружение.

0
b0gus
286 / 180 / 78
Регистрация: 17.03.2014
Сообщений: 512
22.01.2016, 19:38 13
Лучший ответ Сообщение было отмечено vavun как решение

Решение

Цитата Сообщение от ivanxam Посмотреть сообщение
действительно!
ежели нужно раскрывать значение переменных, то 4 строку пишем так:
Windows Batch file
4
<"%~f0" >"%~dp0This_is_the_file.txt" (for /f "tokens=*" %%v in ('more +%num%') do call echo.%%v)
3
22.01.2016, 19:38
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2016, 19:38

Создание .bat файлов по заданиям
1. Скопировать все файлы с расширение .txa в каталог MIKE. Скопировать все файлы из каталога LINA в...

Копирование файлов, создание bat
Добрый день! Помогите бывалые, как реализовать .bat Требуется с шары \\tesserver\instalagent.txt...

Создание bat для добавление users (ввод через клавиатуру) и копирование файлов эталонной папки в созданную
Помогите пожалуйста с заданием. :) Создать командный файл, создающий в системе нового пользователя...


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

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

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