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

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

Автор: Karbid87
Дата сообщения: 01.07.2011 18:20
NIKZZZZ, спасибо и вам, но мне уже помогли.
P.S. Ваш код длинноват всё-таки.
Автор: 01MDM
Дата сообщения: 01.07.2011 18:24
NIKZZZZ,
Забыл про этот способ. Можно его немного сократить:

Код:
@echo off
setlocal enabledelayedexpansion

set "key=null"

:again
set /p key="Enter value: "

set "test=%key%"
for /l %%i in (1,1,9) do set "test=!test:%%i=0!"
if not "%test%"=="0000" goto:again
echo %key%
Автор: Karbid87
Дата сообщения: 01.07.2011 18:32
Если ввести " и что то подобное, то выдает ошибку в синтаксисе.
Автор: 01MDM
Дата сообщения: 01.07.2011 18:46
Karbid87
Видимо полностью универсального способа нет. Но батник в этом случае просто вылетает и ничего не делает.
Автор: Karbid87
Дата сообщения: 01.07.2011 19:02
Еще раз всем огромное спасибо за помощь. Вопрос исчерпан.
Автор: wolf0425
Дата сообщения: 02.07.2011 06:44
Karbid87
держи для коллекции ещё такой вариант:

Код: @echo off

:again
set /p key="Enter value 1000-9999: "
set /a key = %key%
if errorlevel 1 goto:again
if %key% lss 1000 goto:again
if %key% geq 10000 goto:again
echo %key%
Автор: ComradG
Дата сообщения: 02.07.2011 21:09
несколькими месяцами ранее я задавался вопросом можно ли с помощью батника создавать ярлыки, просматривать zip-архивы и тому подобным. у меня были наработки по теме, но я тогда я их отправил в стол, а ныне, разбирая старые записи, у меня все четче вырисовывался план, согласно которому можно обыграть некоторые ограничения командных сценариев, скрестив их с cscript, тем самым унифицировав систему администрирования: ведь многие не спешат использовать PowerShell в виду того, что многим он представляется довольно сложным в освоении (хотя это не так), да и не всегда имеется возможность использовать сторонние утилиты вроде sed или tail, имитацию - правда весьма урезанную, - можно представить в виде сценариев cscript. но давайте перейдем от слов к делу. что я предлагаю? те, кто ни разу не работал с cscript'ом, возможно будут несколько озадачены, увидев батник, например, такого содержания:
Код: @set @script=1 /*
@echo off
set @script=
cscript //nologo //e:jscript "%~dpnx0" %*
exit /b
*/
WScript.echo("Это сценарий cscript вызванный из батника.");
Автор: Free_Soft
Дата сообщения: 02.07.2011 21:23
ComradG
Здорово. Вопрос только: как это впихнуть к примеру в основной код, т.е. когда после сценария cscript должен пойти еще код основного батника?
Автор: ComradG
Дата сообщения: 02.07.2011 21:37
Free_Soft
я как раз над этим работаю теперь
Автор: 01MDM
Дата сообщения: 02.07.2011 21:41
ComradG
Гибриды уже обсуждались например здесь.
Автор: ComradG
Дата сообщения: 02.07.2011 21:46
01MDM
не знал. спасибо!
Автор: lorents
Дата сообщения: 03.07.2011 12:34
Добрый день!
Есть файлы с названием png*.log, где * - некое неизвестное число. Подскажите, как можно удалить такой файл?
Автор: 5peciali5t
Дата сообщения: 03.07.2011 12:42
lorents
при известном конкретном каталоге
del /f /q png*.log (del /f /q каталог\png*.log)
Автор: lorents
Дата сообщения: 03.07.2011 12:53
5peciali5t
Как все гениально

Спасибо большое!
Автор: qqqbbb
Дата сообщения: 03.07.2011 15:50
Как можно текущий путь сохранить как переменную и удалить ее из текстового файла?
Автор: wolf0425
Дата сообщения: 03.07.2011 16:12

Цитата:
Как можно текущий путь сохранить как переменную

set "peremennaya=%cd%"

Цитата:
и удалить ее из текстового файла?

кого удалить? переменную? пример пиши - чего удалять.

Автор: ssi
Дата сообщения: 03.07.2011 20:52
приветствую всех. Прошу помощи в батнике.
имеется следующий батник:

rem @echo off
set reg_path=hkcu\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
set reg_param=Desktop
reg query "%reg_path%" /v "%reg_param%" >c:\windows\temp\1.txt
for /F "tokens=1,2,3" %%a in (c:\windows\temp\1.txt) do if "%%a"=="%reg_param%" set reg_value=%%c
echo %reg_value%

нашел на sql.ru. Он берет из реестра и помещает в переменную reg_value путь к рабочему столу текущего пользователя. Собсна это и требуется так как папка "рабочий стол" перемещена у пользователей на диск D.
Все работает, НО в переменную помещается не, к примеру, d:\profile\username\Рабочий стол, а d:\profile\username\Рабочий. Дело я так понимаю в цикле, но опыта у меня с ними нет. Подскажите как правильно надо сделать?
Автор: 5peciali5t
Дата сообщения: 03.07.2011 21:06
ssi
а так вполне возможно где то нехватает вполне безобидных кавычек для того чтобы корректно отображались пути содержащие пробелы, возможно тут (не проверял)
set "reg_value=%%c"

альтернатива, имеющая массу других полезных ключей, переменных и опций, но требующая исполняемого файла (примерно 35 кб)
nircmd - ссылка есть в полезных утилитах в шапке
[more=возможности]NirCmd - маленькая утилита для командной строки, которая позволяет Вам выполнить некоторые полезные задачи, не отображая никакого пользовательского интерфейса. Выполняя NirCmd с простой опцией командной строки, Вы можете записать и удалить значения ключи в реестре, записать значения в INI файл, позвонить по вашей учетной интернет-записи или соединяться с VPN сетью, перезапускать Windows или завершать работу компьютера, создавать ярлык к файлу, изменять дату создания/модификации файла, изменять ваши параметры настройки экрана, выключать ваш монитор, открывать лоток вашего CD-ROM привода, и многое другое...[/more]
и конкретно вам подошедшая переменная, адрес которой эта утилита сама вычисляет
nircmd.exe "~$folder.desktop$"
Автор: qqqbbb
Дата сообщения: 03.07.2011 22:17

Цитата:
пример пиши - чего удалять.

Неправильно задал вопрос. Нужно из файла удалить текст который соответствует текущему пути. То есть строка С:\bigfolder\mfolder\sfolder\file.ext должна превратиться в sfolder\file.ext если батник запущен в папке mfolder.
Автор: ssi
Дата сообщения: 03.07.2011 22:20
5peciali5t


Цитата:
а так вполне возможно где то нехватает вполне безобидных кавычек для того чтобы корректно отображались пути содержащие пробелы, возможно тут (не проверял)
set "reg_value=%%c"


не работает

Утилиту посмотрю, но хотелось бы решить без костылей
Автор: Elroir
Дата сообщения: 03.07.2011 23:09
ssi

Код:
@echo off
set "reg_path=hkcu\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
set "reg_param=Desktop"
for /F "tokens=1,2*" %%a in ('reg query "%reg_path%" /v "%reg_param%"') do if "%%a"=="%reg_param%" set "reg_value=%%c"
echo %reg_value%
Автор: Nagual
Дата сообщения: 03.07.2011 23:31
ssi
echo "%USERPROFILE%\Рабочий стол" не срабатывает?
Автор: 5peciali5t
Дата сообщения: 04.07.2011 00:34
Nagual

Цитата:
echo "%USERPROFILE%\Рабочий стол" не срабатывает?

в его случае может и сработает, но это не максимально универсально (винда может быть в другой раз на нерусском языке)
Автор: adam264
Дата сообщения: 04.07.2011 01:32
Здравствуйте! Требуется удалить из log-файла батником подстроки с пробелами:
"File: "
" Compressed: NO"
"Extraction result: SUCCESS!"

Я так понимаю что искать нужно с помощью команды FINDSTR/C:строка, но как перебирать строки в файле?
Помогите пожалуйста разобраться.
Автор: Elroir
Дата сообщения: 04.07.2011 01:50
adam264

Цитата:
но как перебирать строки в файле?


Код:
for /F ... %%a in (file.txt) do (
...
)
Автор: adam264
Дата сообщения: 04.07.2011 02:13
Понятно что через FOR. Я вот на основе аналогичного примера что-то навоял, но почему-то выводит пустой файл, видимо пропускает оставшееся содержимое строки если в ней уже что-то нашёл.

@echo off
chcp 1251

for /f "tokens=*" %%a in ('more^<Abel.log') do call :_replace %%a
goto eof

:_replace
set i=%*
echo %i%
set i=%i:File: =%
set i=%i: Compressed: NO=%
set i=%i:Extraction result: SUCCESS!=%
set i=%i:доча=сын% echo %i%>>spisok.txt
goto eof

:eof
Автор: king_stiven
Дата сообщения: 04.07.2011 06:37

Цитата:
Требуется удалить из log-файла батником подстроки с пробелами:
"File: "
" Compressed: NO"
"Extraction result: SUCCESS!"


Код: @echo off
chcp 1251
for /f "delims=" %%a in ('Abel.log') do (
echo "%%a"| FINDSTR /C:"File: " || echo "%%a"| FINDSTR /C:" Compressed: NO" ||echo "%%a"| FINDSTR /C:"Extraction result: SUCCESS!"
if errorlevel 1 1>>1.txt echo %%a
)
Автор: ssi
Дата сообщения: 04.07.2011 08:07
Elroir

Цитата:
@echo off
set "reg_path=hkcu\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
set "reg_param=Desktop"
for /F "tokens=1,2*" %%a in ('reg query "%reg_path%" /v "%reg_param%"') do if "%%a"=="%reg_param%" set "reg_value=%%c"
echo %reg_value%


спасибо большое, работает!

Nagual

Цитата:
echo "%USERPROFILE%\Рабочий стол" не срабатывает?

эта команда указывает на стандартную папку "Рабочий стол" в "Documents & Settings"
Автор: adam264
Дата сообщения: 04.07.2011 09:09

Цитата:
@echo off
chcp 1251
for /f "delims=" %%a in ('Abel.log') do (
echo "%%a"| FINDSTR /C:"File: " || echo "%%a"| FINDSTR /C:" Compressed: NO" ||echo "%%a"| FINDSTR /C:"Extraction result: SUCCESS!"
if errorlevel 1 1>>1.txt echo %%a
)

king_stiven, батник открывает тот файл и ничего не происходит.

вот часть файла, он состоит из аналогичных строк:
File: bt.paa Compressed: NO
Extraction result: SUCCESS!
File: pipipish.pac Compressed: NO
Extraction result: SUCCESS!
File: pishpish.pac Compressed: NO
Extraction result: SUCCESS!

Автор: king_stiven
Дата сообщения: 04.07.2011 11:50

Код: @echo off
chcp 1251
for /f "delims=" %%a in (Abel.log) do (
echo "%%a"| FINDSTR /C:"File: " || echo "%%a"| FINDSTR /C:" Compressed: NO" ||echo "%%a"| FINDSTR /C:"Extraction result: SUCCESS!"
if errorlevel 1 1>>1.txt echo %%a
)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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