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

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

Автор: denisbobrov3
Дата сообщения: 12.11.2009 10:35
Всем спасибо, воспользовался конструкцией
for /f "tokens=1 delims=:" %%a in ('findstr /n "." test.txt') do set /a "linecount=%%a"
Автор: Maqentaer
Дата сообщения: 12.11.2009 10:36
просто мне не удалось протестировать на разных ОС, и у меня в WinXP SP2 Eng нету третьей пустой строки
Автор: BumerangII
Дата сообщения: 12.11.2009 10:44
Добрый день всем,

подскажите, как побороть проблему

даю команду
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v BgInfo /t REG_SZ /d "C:\Program Files\BgInfo\bginfo.exe\" \"C:\Program Files\BgInfo\%bgi%\" /SILENT /TIMER:0 /NOLICPROMPT

в реестре получаю

C:\Program Files\BgInfo\bginfo.exe\" "C:\Program Files\BgInfo\%bgi%\" /SILENT /TIMER:0 /NOLICPROMPT

исчезает первая кавычка - как это побороть, так как без неё не работает
Автор: Maqentaer
Дата сообщения: 12.11.2009 10:54
BumerangII
ты как раз только ее и не экранируешь
Автор: 01MDM
Дата сообщения: 12.11.2009 10:54
BumerangII

Код:
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v BgInfo /t REG_SZ /d "\"C:\Program Files\BgInfo\bginfo.exe\" \"C:\Program Files\BgInfo\%bgi%\" /SILENT /TIMER:0 /NOLICPROMPT" /f
Автор: denisbobrov3
Дата сообщения: 12.11.2009 11:01
Еще один вопрос - как получить ежемесячный отчет об измененных файлах в каталоге?
Автор: Uruloke
Дата сообщения: 12.11.2009 11:06
king_stiven
Если поменять GetFile на GetFolder, то выдается

Код: time_diff.vbs(1,1) Ошибка выполнения Mircosoft VBScript: Путь не найден
Автор: mugil_cephalus
Дата сообщения: 12.11.2009 11:09
denisbobrov3
1) SCHTASKS /Create - раз в месяц выполнять задание
2) задание - dir
все зависит от параметров конкретной задачи
Автор: BumerangII
Дата сообщения: 12.11.2009 11:33
01MDM спасибо
Автор: wolf0425
Дата сообщения: 12.11.2009 11:37
mugil_cephalus

Цитата:
вывод всех непустых строк файла s в файл, построчно:
for /f "delims=" %%a in ('type s') do 1>>file.txt echo.%%a
этот код добавляет пустую строку на этапе echo - можешь сам проверить

да проверял я не раз. Он НЕ добавляет пустых строк, у тебя глюки с подсчетом строк или с термином "пустая строка".
команда echo abc>file.txt создает пятибайтный файл, состоящий из ОДНОЙ строки, НИКАКОЙ ПУСТОЙ СТРОКИ В НЕМ НЕТ.

команда 1>file.txt set /p=abc<nul создает трехбайтный файл, состоящий ТОЖЕ из одной, но незвершенной строки.
большинству программ пофигу - завершена последняя строка файла CRLF или EOF
Автор: soft111
Дата сообщения: 12.11.2009 11:41
Огромное спасибо всем кто отклинулся, этот вариант для удаления пустой строки очень помог:


Цитата:
echo off
for %%A in (C:\test\*.txt) do call:_1 %%A
goto :eof

:_1
for /f "tokens=*" %%i in ('type %1') do 0>nul 1>C:\test\%~n1.txt set /p="%%i" && del /q %1 && ren C:\test\%~n1_.txt %~nx1
goto :eof

Файлов у меня будет как я и написал 100 штук, но в день эта операция будет повторяться множество раз, поэтому и хотел посредством батника увеличить скорость обрабатывания текстовиков.

Напомню второй вопрос, есть текстовый файл, в нем строка выглядит так: <a href="https://login.site.com/app/signup/confirm.cgi?u=name1&uid=2074563"><font face="verdana,helvetica" color="#FF6905" style="font-size: 11px">https://login.site.com/app/signup/confirm.cgi?u=name1&uid=2074563</font></a><br><br> (все написано в одну строку, напоминаю, нужно оставить только 1 url, сайт не меняется, меняются только name1 и 2074563, причем name1 может быть больше 5 символов. Текстовые файлы распологаются, допустим в папке C:\test2. Можно ли что нибудь сделать не прибегая к сторонним утилитам?

Автор: denisbobrov3
Дата сообщения: 12.11.2009 11:42

Цитата:
все зависит от параметров конкретной задачи

Задача вполне конкретна))
Необходимо вывести на экран список файлов, которые были изменены в этом месяце..
Автор: BVV63
Дата сообщения: 12.11.2009 11:54
Maqentaer
mugil_cephalus
OK. Использовал вторую схему, предложенную Maqentaer (показалась наиболее логичной), переменная больше не удаляется, так что перехожу с now на wmic.
Автор: king_stiven
Дата сообщения: 12.11.2009 12:39
Uruloke

Код: chcp 1251
for /d %%a in (*) do (
set "fgh=%%a"
call :compare_crdate
)
goto :eof
:compare_crdate
cscript timediff.vbs "%fgh%"
if %errorlevel% gtr 14 echo "%fgh%" created more than 14 days ago
Автор: igor_andreev
Дата сообщения: 12.11.2009 12:46
denisbobrov3

Цитата:
Необходимо вывести на экран список файлов, которые были изменены в этом месяце..


Код:
@echo off
echo WScript.Quit (DateDiff("d", CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments.Item(0)).DateLastModified, Now))>"%temp%\timediff.vbs"

for /r %%a in (*.*) do call :compare_last_mod_date "%%a"
del "%temp%\timediff.vbs"
goto :eof
:compare_last_mod_date
cscript //nologo "%temp%\timediff.vbs" %1
if %errorlevel% lss 30 echo %1 modified in last 30 days

Автор: mugil_cephalus
Дата сообщения: 12.11.2009 12:56
wolf0425
1. про CRLF я плохо знаю, - представляю что это такое, - но на практике с ними не работал (нужды не было)
2. твой код - for /f "delims=" %%a in ('type s') do 1>>file.txt echo.%%a - подправил для command-line mode вот так:

Код: for /f "delims=" %a in ('type s') do 1>>file.txt echo.%a
Автор: Uruloke
Дата сообщения: 12.11.2009 13:15
king_stiven
О, спасибо, работает!
Автор: mugil_cephalus
Дата сообщения: 12.11.2009 13:50
не пойму где ошибся
файл z с текстом <a href="https://login.site.com/app/signup/confirm.cgi?u=name1&uid=2074563"><font face="verdana,helvetica" color="#FF6905" style="font-size: 11px">https://login.site.com/app/signup/confirm.cgi?u=name1&uid=2074563</font></a><br><br> (одной строкой)
вот command-line mode code:
for /f "tokens=2" %a in ('"type z"') do set "var1=%a" && set "var2=%var1:~-6,-7%" && echo _%var2%_
вот листинг:
W:\>for /f "tokens=2" %a in ('"type z"') do set "var1=%a" && set "var2=%var1:~-6,-7%" && echo _%var2%_

W:\>set "var1=href="https://login.site.com/app/signup/confirm.cgi?u=name1&uid=2074563"><font" && set "var2=" && echo _%var2%_

W:\>

вопрос отпал - вижу ошибку ("=" в value set)


P.S.
жалко такая конструкция не работает - for /f "tokens=2" %a in ('"type z"') do set "var1=%~-6,-7a" && echo _%var1%_ и "delims="" тоже не нравится cmd

дело ясно: "<" и ">" - не нравятся....
Автор: wolf0425
Дата сообщения: 12.11.2009 14:18

Цитата:
4. файл s делал так:
notepad, ввел _text_ и enter
5. notepad/в файле file.txt: 1строка:_text_ после "_" каретка клавишей/стрелкой "->" переходит ниже на 2строку (там пусто - нет даже пробела)
это пример файла, состоящего из ОДНОЙ строки, так как во второй строке НИЧЕГО - ни символов ни признака конца строки, курсор показывают на второй строке - потому что он стоит ЗА границей файла, после символов конца первой.
поставишь во второй строке пробел или какой то символ или нажмешь ввод еще раз - только тогда появится вторая строка, а пока ее еще НЕТ.
Как в файле нулевой длины - нулевое количество строк, по определению.

Цитата:
3. вот листинг:
W:\>for /f "delims=" %a in ('type s') do 1>>file.txt echo.%a
W:\>echo._text_1>>file.txt
в таких тестовых примерах не забывай вписывать в печать маркер начала строки, например echo.-%a чтоб быо видно - печатал ли кто-то тут и сколько раз.
Цикл печатает одну строку, один раз, как ему и положено.
Автор: llanowar
Дата сообщения: 12.11.2009 14:26
Добрый день! Хочется добавить скриптом через ГПО на все компьютеры пользователя в группу локальных администраторов. Но часть компв с английской виндой, часть с русской, и как факт группа может называться administrators, а может Администраторы. Хочется сделать условие на это дело, но не знаю как проверить существование группы. Есть вариант с

NET localgroup Administrators /add "user"
if errorleverl 1 (NET localgroup Администраторы /add "user")

но мне кажется кривым вариантом.
Автор: mugil_cephalus
Дата сообщения: 12.11.2009 15:05
wolf0425

Цитата:
это пример файла, состоящего из ОДНОЙ строки, так как во второй строке НИЧЕГО - ни символов ни признака конца строки, курсор показывают на второй строке - потому что он стоит ЗА границей файла, после символов конца первой.
поставишь во второй строке пробел или какой то символ или нажмешь ввод еще раз - только тогда появится вторая строка, а пока ее еще НЕТ.
Как в файле нулевой длины - нулевое количество строк, по определению.


теперь все понятно, - вопрос в дефинициях (qui pro guo) - но soft111 просил удалить именно эту "пустую" строку и
Цитата:
Огромное спасибо всем кто отклинулся, этот вариант для удаления пустой строки очень помог:


Цитата:echo off
for %%A in (C:\test\*.txt) do call:_1 %%A
goto :eof

:_1
for /f "tokens=*" %%i in ('type %1') do 0>nul 1>C:\test\%~n1.txt set /p="%%i" && del /q %1 && ren C:\test\%~n1_.txt %~nx1
goto :eof


ему помогла конструкция с set /p - очевидно задача была именно такая - удалить эту "пустую" строку (у меня через set /p курсор стоиот на первой строке - после _text_)
Автор: wolf0425
Дата сообщения: 12.11.2009 15:08

Цитата:
теперь все понятно, - вопрос в дефинициях (qui pro guo) - но soft111 просил удалить именно эту "пустую" строку и
угу, проблемы с терминологией - он признак конца строки просил удалить, crlf
зачем ему это надо - непонятно, но бывает и нужно.
Автор: mugil_cephalus
Дата сообщения: 12.11.2009 15:10
wolf0425

Цитата:
в таких тестовых примерах не забывай вписывать в печать маркер начала строки, например echo.-%a

это понял

Цитата:
чтоб быо видно - печатал ли кто-то тут и сколько раз.

это нет

Добавлено:
wolf0425

Цитата:
угу, проблемы с терминологией - он признак конца строки просил удалить, crlf

теперь ВООБЩЕ ВСЕ понятно - после такого пояснения - теперь я знаю (sic!) как "называется" эта "пустая" строка - признак конца строки (CRLF)
Автор: soft111
Дата сообщения: 12.11.2009 16:20
mugil_cephalus

Мне все равно, url одинаковые всегда будут.
Автор: mugil_cephalus
Дата сообщения: 13.11.2009 08:03
soft111

Код: echo on
for %%A in (C:\test2\*.txt) do call:_1 %%A
set var1=
set var2=
goto :eof

:_1
for /f "tokens=3 delims=: " %%i in ('"type %1"') do set "var1=%%i"
set "var2=%var1:~0,-7%"
0>nul 1>C:\test2\%~n1_.txt set /p="https:%var2%" && del /q %1 && ren C:\test2\%~n1_.txt %~nx1
goto :eof
Автор: king_stiven
Дата сообщения: 13.11.2009 09:01
mugil_cephalus
/a [[:] атрибуты]
Выводит имена только тех файлов и каталогов, которые имеют указанные атрибуты. Если параметр /a не указан, команда dir выводит имена всех файлов, за исключением системных и скрытых. Если параметр /a указан без атрибутов, команда dir выводит имена всех файлов, включая скрытые и системные. Ниже приведен список значений, которые могут быть использованы при задании параметра атрибуты. Двоеточие (: ) является необязательным.
Автор: soft111
Дата сообщения: 13.11.2009 09:20
mugil_cephalus

Большое Вам спасибо, обе задачи теперь работают корректно. Вы мне очень помогли.
Автор: mugil_cephalus
Дата сообщения: 13.11.2009 09:22
king_stiven

Цитата:
Если параметр /a указан без атрибутов, команда dir выводит имена всех файлов, включая скрытые и системные.

то есть, если /a без атрибутов, то получу все-все файлы? и файлы, и папки (directories), и hide, и sys, и read, и archive, и без атрибутов? то есть таким способом (меня давно это вопрос интересовал, просто пока не задавал его на форуме) можно вывести АБСОЛЮТНО весь list каталога, даже то, чего explorer иначе показывает (list of temporary inet files, например)?
Автор: wolf0425
Дата сообщения: 13.11.2009 10:49

Цитата:
(list of temporary inet files, например)?
а что, потратить 5 секунд и проверить - опять влом, надо на форуме спрашивать? замечательно выведет.

список всех файлов c:\
1>filelist.txt dir /b/s/a-d C:\
только надо быть аккуратным - сейчас не прошлый век, и на диске запросто могут быть файлы с символами в именах, не укладывающимися в восьмибитную кодировку дефолтовой кодовой страницы (866)
Автор: mugil_cephalus
Дата сообщения: 13.11.2009 11:34
wolf0425

Цитата:
а что, потратить 5 секунд и проверить - опять влом, надо на форуме спрашивать? замечательно выведет.

один/два раза проверить и получить нужный результат не тождественно закономерности (можно и на красный свет удачно перейти дорогу - это случайность, которая не означает закономерность (были времена, когда я инетился без антивира и файервола и использовал кириллицу в нэйминге - это не значит, что я делал правильно, какое-то время это работало, но потом я "узнал", что это случайность, а не закономерность ) не всегда можно индукцией придти к дедукции (вот такая вот дидактика получается ) зачем ходить по тонкому льду, когда уже есть проторенные дорожки?.. зачем строить замки из песка, когда сразу можно заложить надежный фундамент?...


по существу, а не по "регламенту" :
а как я проверю , что в tempInetFilesDirList я получил ПОЛНЫЙ перечень - посмотреть, что из 200.000 не вошло в список? это же CLI, а не GUI - здесь ошибки подолгу латентны

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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