Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 10

Автор: anstrem
Дата сообщения: 24.03.2011 16:27
Подскажите пожалуйста как можно используя "net time \\hostname" вывести в стандартный вывод только собственно время на удаленном хосте, выкинув все остальное, что выдает команда ?
Автор: res2001
Дата сообщения: 24.03.2011 16:34
anstrem
вариант для исполнения в ком.строке
for /f "tokens=5,*" %a in ('net time \\hostname') do echo.%b & exit
Автор: sL4yer
Дата сообщения: 24.03.2011 16:40
anstrem

Код: for /f "tokens=7 ", %%i in ('net time \\172.18.2.46') do (
    echo %%i
)
Автор: Mr_Hat
Дата сообщения: 24.03.2011 19:04
res2001


Цитата:
Цитата:в 64 битах переменная %ProgramFiles% по какой то причине разворачивается в не свойственный путь для этой системы в


Так разворачивается, когда работает в 32битных приложениях, т.е. получается, что твой батник запускается в 32битном cmd.exe.



хм.. а как же тогда вызвать 64 бит cmd и где оно находится

c:\Windows\winsxs\amd64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7601.17514_none_e932cc2c30fc13b0\cmd.exe
c:\Windows\System32\cmd.exe
c:\Windows\SysWOW64\cmd.exe
c:\Windows\winsxs\wow64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7601.17514_none_f387767e655cd5ab\cmd.exe
c:\Windows\winsxs\amd64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7600.16385_none_e701b864340d9016\cmd.exe
c:\Windows\winsxs\wow64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7600.16385_none_f15662b6686e5211\cmd.exe

который из них ?
Автор: 01MDM
Дата сообщения: 24.03.2011 19:23
Mr_Hat
Зачем тебе искать 64-битную cmd.exe? Просто проверь переменные и по результатам выполняй действия:

Код:
if defined programfiles(x86) (set apps=%programfiles(x86)%) else (set apps=%programfiles%)
Автор: praidik
Дата сообщения: 24.03.2011 19:36
Здравствуйте.
Скажите пожалуйста какой командой можно сменить фоновый рисунок рабочего стола?
Автор: 01MDM
Дата сообщения: 24.03.2011 19:49
praidik
для 7-ки, с помощью nircmd

Код:
@echo off

copy /y "d:\Pictures\034.jpg" "%appdata%\Microsoft\Windows\Themes\TranscodedWallpaper.jpg
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
nircmdc win redraw desktop
Автор: ArchiDevil
Дата сообщения: 24.03.2011 20:05
Здравствуйте, уважаемые форумчане

Сразу извиняюсь если что то спрашиваю невероятно тривиальное, но мог бы кто нибудь подсказать как результат какой нибудь команды записать в переменную окружения? Скажем есть команда hostname, которая выводит имя компьютера и переменная name. Возможно ли значение результата команды записать в эту самую переменную?
Автор: 01MDM
Дата сообщения: 24.03.2011 20:13
ArchiDevil

Код:
@echo off

for /f %%i in (' hostname ') do set "hostname=%%i"
echo %hostname%
Автор: ArchiDevil
Дата сообщения: 24.03.2011 20:32
01MDM
Спасибо огромное за разъяснение.
А можно как то вырезать из этой переменной только 6 последних символов? Пробовал что то вроде set hostname=%hostname:~0,-6%, но явно что то путаю...
Автор: 01MDM
Дата сообщения: 24.03.2011 20:37
ArchiDevil

set hostname=%hostname:~-6%
Автор: ArchiDevil
Дата сообщения: 24.03.2011 20:40
01MDM
Спасибо ещё раз) Бродил где то рядом)
Автор: praidik
Дата сообщения: 24.03.2011 20:43
01MDM
Спасибо, но не работает, путь поменял и сконвертил... четно...
Автор: 01MDM
Дата сообщения: 24.03.2011 21:52
praidik
Проверил на ХП, работает, вот базовый вариант без конвертации в bmp:

Код:
@echo off

copy /y "d:\pictures\picture.bmp" "%userprofile%\local settings\application data\microsoft\wallpaper1.bmp"
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
c:\bin\nirsoft\nircmd\nircmdc win redraw desktop
Автор: FantoMax2
Дата сообщения: 25.03.2011 09:04
Всех приветствую!

Помогите доработать [more=код]
@echo off
title Useful Commands
echo 1.ping
echo 2.tracert
echo 3.hostname
echo 4.ipconfig
set /p num="Порядковый номер команды: "
cls
if "%num%" equ "1" goto:ping
if "%num%" equ "2" goto:tracert
if "%num%" equ "3" goto:hostname
if "%num%" equ "4" goto:ipconfig


:ping
title Ping
set /p adr="Введите IP адрес или имя хоста :"
ping %adr%
goto:end

:tracert
title Tracert        
set /p adr="Введите IP адрес или имя хоста :"
tracert %adr%
goto:end

:hostname
title Hostname
hostname
goto:end

:ipconfig
title Ipconfig
ipconfig

:end
pause
[/more] таким образом, чтобы при вводе порядкового номера команды окрывалась новое окно(новая командная оболчка) либо с выводом запрошенной информации или с предложением ввести имя хоста. А первое окно чтобы не закрывалось, предаставляя возможность ввести номер другой команды.

С уважением!
Автор: res2001
Дата сообщения: 25.03.2011 09:38
FantoMax2
[more=Код]
Код: @echo off
if "%~1" equ "ping" goto:ping
if "%~1" equ "tracert" goto:tracert
if "%~1" equ "hostname" goto:hostname
if "%~1" equ "ipconfig" goto:ipconfig
title Useful Commands
:loop
echo 1.ping
echo 2.tracert
echo 3.hostname
echo 4.ipconfig
echo 5.exit
set /p num="Порядковый номер команды: "
cls
if "%num%" equ "1" start "ping" cmd.exe /c "%~0" ping
if "%num%" equ "2" start "tracert" cmd.exe /c "%~0" tracert
if "%num%" equ "3" start "hostname" cmd.exe /c "%~0" hostname
if "%num%" equ "4" start "ipconfig" cmd.exe /c "%~0" ipconfig
if "%num%" equ "5" goto:eof
goto:loop

:ping
title Ping
set /p adr="Введите IP адрес или имя хоста :"
ping %adr%
goto:end

:tracert
title Tracert
set /p adr="Введите IP адрес или имя хоста :"
tracert %adr%
goto:end

:hostname
title Hostname
hostname
goto:end

:ipconfig
title Ipconfig
ipconfig

:end
pause
Автор: FantoMax2
Дата сообщения: 25.03.2011 09:57

Цитата:
res2001

Огромное человеческое спасибо!
Автор: AnGo
Дата сообщения: 25.03.2011 14:47
Всем привет!
Возникла непонятная трабла в бат-файле. До этого работал без проблем, переставил винду и тут началось.
Фрагмент бат-файла:

Код:
@ECHO OFF
rem Новый файл просто добавляется в конце списка
rem 59 - строка с которой начинается список файлов
setlocal
Set DirArchFiles=E:\NAME_DIR\SPYGLASS
Set NameArchFile=archive.rar
MORE /e +59 < %~nx0 > lst.lst
.....
.....
EXIT /b
%DirArchFiles%\AD1\AD1.txt
%DirArchFiles%\AD2\AD2.txt
%DirArchFiles%\AD3\AD3.txt
%DirArchFiles%\AD4\AD4.txt
%DirArchFiles%\AD5\AD5.txt
Автор: res2001
Дата сообщения: 25.03.2011 14:54
AnGo

Цитата:
т.е замены %DirArchFiles% не происходит.

Да и не должно быть замены в приведенном участке кода. Возможно замена происходила где-то ниже по коду.
Давай уж выкладывай оставшийся кусок.
Автор: king_stiven
Дата сообщения: 25.03.2011 14:58
имеются строки вида(это кусок одной строчки):

<a href="http://www.imagebam.com/image/35339035399557/" class="postLink"><var class="postImg" title="http://thumbnails9.imagebam.com/3539/35339035399557.gif">&#30;</var></a> <a href="http://www.imagebam.com/image/e79c3535399559/" class="postLink"><var class="postImg" title="http://thumbnails35.imagebam.com/3539/e79c3535399559.gif">&#30;</var></a> <a href="http://www.imagebam.com/image/be955735399570/" class="postLink"><var class="postImg" title="http://thumbnails35.imagebam.com/3539/be955735399570.gif">&#30;</var...

нужно sedом выцепить:
http://www.imagebam.com/image/35339035399557/
http://www.imagebam.com/image/e79c3535399559/
http://www.imagebam.com/image/be955735399570/
...
...
Автор: lorents
Дата сообщения: 25.03.2011 15:14
Добрый день!

Код: @echo off
setlocal enabledelayedexpansion

set start=%time%
pause
set finish=%time%
call :savelog %start% %finish%
echo !it!
pause

:savelog
set /a "it=%2-%1"
exit /b
Автор: res2001
Дата сообщения: 25.03.2011 15:48
lorents

Цитата:
Подскажите, пожалуйста, где я ошибся?

Ошибся ты в том, что cmd не умеет делать операций со временем, т.е. он не может вычислить:
15:48:30 - 14:30:00
Автор: lorents
Дата сообщения: 25.03.2011 15:54
res2001
Это много объясняет, а как можно решить тогда мою проблему?
Автор: res2001
Дата сообщения: 25.03.2011 15:58
lorents
Проще всего сделать скрипт на VBS/JS, вычисляющий разницу во времени и выводящий ее в stdin и из батника вызывать его.
А можно реализовать и батником, но тогда надо отдельно вычислять разницу часов, минут, секунд. Это может быть довольно геморройно.
Автор: wolf0425
Дата сообщения: 25.03.2011 15:58

Цитата:
а как можно решить тогда мою проблему?

пересчитай время в секунды сам перед вычитанием.


Код:
:savelog
set "Time1=%~1"
set "Time2=%~2"

set /a     time#start = ((0%_time1:~0,1%) * 600 + (%_time1:~1,1%) * 60 + 1%_time1:~3,2% -100 )*60 + 1%_time1:~6,2% - 100
Set /a     it = ((0%_time2:~0,1%) * 600 + (%_time2:~1,1%) * 60 + 1%_time2:~3,2% -100 )*60 + 1%_time2:~6,2% - 100 - %time#start%
exit /b
Автор: res2001
Дата сообщения: 25.03.2011 16:00
Хотя почему геморойно, можно перевести оба времени в секунды, вычислить разницу и перевести обратно. Это реализовать не сложно.
Автор: AnGo
Дата сообщения: 25.03.2011 16:05

Цитата:
Да и не должно быть замены в приведенном участке кода. Возможно замена происходила где-то ниже по коду.
Давай уж выкладывай оставшийся кусок.


Думаю ты ошибаешься. Замена происходит в строке
MORE /e +59 < %~nx0 > lst.lst

Здесь создается файл-список.
Далее идет только обработка ошибок, последовательность операторов типа:

IF ERRORLEVEL=13 GOTO :ERROR13
.....
....
:ERROR13
ECHO ERROR: Error opening temporary file in temp directory!
GOTO :EXIT
....
....

:NOERROR
:: Any additional batch processing goes here
GOTO :EXITNOPAUSE

:EXIT
PAUSE
:EXITNOPAUSE
:: End of batch file here
EXIT /b

Далее по тексту предыдущего поста.

Автор: wolf0425
Дата сообщения: 25.03.2011 16:10

Цитата:
Думаю ты ошибаешься. Замена происходит в строке
MORE /e +59 < %~nx0 > lst.ls
в этом куске кода - никакого изменения содержимого строк не происходит, и происходить не должно.
Автор: res2001
Дата сообщения: 25.03.2011 16:30
AnGo
Замена должна происходить скорее всего там, где ты хочешь использовать файл lst.lst или тебе надо перейти от использования more на for /f ...(%~nx0) и тут уже делать двойное разименование через call. Что-то типа этого
for /f "skip=59 tokens=*" %%a in (%~nx0) do call echo.%%a >>lst.lst
Автор: lorents
Дата сообщения: 25.03.2011 17:14
wolf0425
Выдает:

Цитата:
Непарные скобки.

Не могу понять, что ему не нравится

Не уже ли нет программы, которая могла бы вычислить время. К тому же там еще дату надо вычислять, только ща обратил на это внимание.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.