Показать полную графическую версию : [решено] все команды в одну строку?
super_bitard
24-03-2011, 17:10
вот скрипт:
echo "example text">file.bat
вместо "example text" нужно поместить следующий текст:
echo off
cls
ipconfig/all
pause
в общем батник должен создать батник с текстом в столбик.
И, если не затруднит как поместить этот текст вместо "example text":
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"^|Find "HideFileExt"`) Do set /a key=%%J
if %key%==0 (
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 00000001 /f
) else (
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 00000000 /f
)
Petya V4sechkin
24-03-2011, 17:25
если не затруднит как поместить этот текст вместо "example text"
Echo For /F "UseBackQ Tokens=2*" %%%%I In (`Reg Query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"^^^|Find "HideFileExt"`) Do set /a key=%%%%J>file.bat
Echo if %%key%%==0 (>>file.bat
Echo reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 00000001 /f>>file.bat
Echo ) else (>>file.bat
Echo reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 00000000 /f>>file.bat
Echo )>>file.bat
super_bitard
24-03-2011, 17:55
ok, thanks
Необходимо записать код в одну строку. Почему-то не присваивается переменная. Прошу подсказать, где ошибка.
cmd.exe /c "SetLocal enabledelayedexpansion& set "hst=%windir%\system32\drivers\etc"& for /f "usebackq delims=" %%i in ("%hst%\hosts") do if not "%%i"=="127.0.0.1 martau.com" if not "%%i"=="127.0.0.1 total-uninstall.com" echo %%i>>"%hst%\$hosts"& del /q "%hst%\hosts"& ren "%hst%\$hosts" hosts"
Dragokas
10-04-2013, 21:57
cmd /e:ON /v:ON /c "set hst=%windir%\system32\drivers\etc& for /f "usebackq delims=" %%i in ("!hst!\hosts") do if not "%%i"=="127.0.0.1 martau.com" if not "%%i"=="127.0.0.1 total-uninstall.com" echo %%i>>"!hst!\$hosts"& del /q /a "!hst!\hosts"& ren "!hst!\$hosts" hosts"
Там ! вместо % нужно использовать.
Еще чуть сократил код и добавил ключ /a к del.
Код в батнике работает, как секция [File.Delete] inf файла не работает. Как сделать, чтобы и inf работал?
cmd /e:ON /v:ON /c "(for /f "usebackq delims=" %%i in ("%windir%\system32\drivers\etc\hosts") do if not "%%i"=="127.0.0.1 martau.com" if not "%%i"=="127.0.0.1 total-uninstall.com" echo %%i>>"%windir%\system32\drivers\etc\$hosts")& (del /q "%windir%\system32\drivers\etc\hosts"& ren "%windir%\system32\drivers\etc\$hosts" hosts)"
*есть предположение, что ошибка в инфе получается из-за знака равно, правая часть от знака равно присваивается левой части. Как это исправить?
bagfinder
17-01-2014, 16:54
Подскажите, почему при использовании
date /t & time /t >> %log%
внутри батника, в лог записывается лишь результат time /t.
При этом, если ввести в командную строку
date /t & time /t
то выводится результат обеих команд
bagfinder, потому что нужна группировка
(date /t & time /t) >> %log%
А вот как сделать так, чтобы вывод обеих команд был в одной строке?
почему при использовании »
Потому что запись "date /t & time /t >> %log%" эквивалентна двум строкам:
date /t
time /t >> %log%
А вот как сделать так, чтобы вывод обеих команд был в одной строке? »
Напрямую — никак. Поскольку перевод строки добавляется при выводе и никак не зависит от того, каким образом Вы расположите команды.
Один из возможных типовых обходных путей:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (`date /t`) do set sDate=%%~i
for /f "usebackq delims=" %%i in (`time /t`) do set sTime=%%~i
if defined sDate if defined sTime >>"log.txt" echo %sDate%%sTime%
endlocal
exit /b 0
Iska, может быть ещё такой вариант?
start /wait writedate & time /t >> %log%
с дополнительным батником writedate.bat (или writedate.cmd). Хотя всё равно неизящно...
Для регулярного применения можно вынести в процедуру, наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion
call :GetDateTime
>>"log.txt" echo %DateTime%
call :GetDateTime
>>"log.txt" echo %DateTime%
call :GetDateTime
>>"log.txt" echo %DateTime%
endlocal
exit /b 0
:GetDateTime
setlocal enableextensions enabledelayedexpansion
set sOut=%~0
for /f "usebackq delims=" %%i in (`date /t`) do set sDate=%%~i
for /f "usebackq delims=" %%i in (`time /t`) do set sTime=%%~i
endlocal & set %sOut:~4%=%sDate%%sTime%
exit /b
Поскольку обе команды — внутренние, будет исполняться достаточно быстро. Хотя проще, думаю, вовсе сделать отдельную процедуру для вывода в лог, скажем:
@echo off
setlocal enableextensions enabledelayedexpansion
call :OutLog "bla-bla-bla"
call :OutLog "bla-bla-bla 2"
call :OutLog
call :OutLog "bla-bla-bla 3"
endlocal
exit /b 0
:OutLog
setlocal enableextensions enabledelayedexpansion
set sLine=%~1
for /f "usebackq delims=" %%i in (`date /t`) do set sDate=%%~i
for /f "usebackq delims=" %%i in (`time /t`) do set sTime=%%~i
>>"log.txt" <nul set /p sVar=%sDate%%sTime%
if defined sLine (
>>"log.txt" echo %sLine%
) else (
>>"log.txt" echo.
)
endlocal
exit /b
Sphinx114
19-01-2014, 16:35
>>log.txt echo %date% %time%
Дату и время ещё можно вытащить из wmic os get LocalDateTime
Sphinx114, разумеется можно. Просто накладные расходы при регулярном использовании (т.е., как раз в данном случае) будут достаточно велики.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.