PDA

Показать полную графическую версию : [решено] все команды в одну строку?


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

sov44
10-04-2013, 15:45
Необходимо записать код в одну строку. Почему-то не присваивается переменная. Прошу подсказать, где ошибка.
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.

sov44
10-04-2013, 23:12
Код в батнике работает, как секция [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%
А вот как сделать так, чтобы вывод обеих команд был в одной строке?

mwz
17-01-2014, 17:01
почему при использовании »
Потому что запись "date /t & time /t >> %log%" эквивалентна двум строкам:

date /t
time /t >> %log%

Iska
17-01-2014, 17:47
А вот как сделать так, чтобы вывод обеих команд был в одной строке? »
Напрямую — никак. Поскольку перевод строки добавляется при выводе и никак не зависит от того, каким образом Вы расположите команды.

Один из возможных типовых обходных путей:
@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

mwz
17-01-2014, 20:15
Iska, может быть ещё такой вариант?

start /wait writedate & time /t >> %log%

с дополнительным батником writedate.bat (или writedate.cmd). Хотя всё равно неизящно...

Iska
17-01-2014, 21:37
Для регулярного применения можно вынести в процедуру, наподобие:
@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

Iska
19-01-2014, 17:29
Sphinx114, разумеется можно. Просто накладные расходы при регулярном использовании (т.е., как раз в данном случае) будут достаточно велики.




© OSzone.net 2001-2012