Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11448 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
radeonuser

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
 
Тогда нужен скрипт, который делает 2 действия
1) добавляет язык
2) переключается на его

Всего записей: 921 | Зарегистр. 09-05-2018 | Отправлено: 13:35 22-05-2018
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по cmd файлу.
Есть файл используемый для копирования файлов средствами программы FastCopy.
 

Код:
@echo off
chcp 1251
:: Копируем с использованием программы FastCopy
c:\temp\111\fastcopy341\fastcopy.exe /log /filelog /logfile=c:\temp\111\fastcopy341\copy.log /cmd=update /verify /speed=8 /auto_close /no_ui /include="*cmd*" "c:\temp\111\" /to="C:\temp\111\222\"
:: Из лога FastCopy получаем ссылку на расширенный лог в переменную %log_extended%
SetLocal EnableExtensions
set file=C:\Temp\111\FastCopy341\copy.log
For /F "UseBackQ tokens=1-2 delims== " %%a in ("%file%") do if "%%a"=="<FileLog>" set log_extended=%%b
:: Отправляем лог по почте
C:\Temp\111\blat\blat.exe -server 192.168.19.180 -f backup@cityarch.mail -to admin@cityarch.mail -subject "Отчет о копировании" -bodyF c:\temp\111\fastcopy341\copy.log -attach %log_extended% -log %blat_path%\blat.log
:: После отправки удаляем расширенный лог
rem del %log_extended% /q
:: Удаляем лог копирования программы FastCopy
rem del c:\temp\111\fastcopy341\copy.log /q
pause
exit

 
Содержимое файла copy.log
Подробнее...
 
Есть проблема в куске разбора файла лога:
set file=C:\Temp\111\FastCopy341\copy.log
For /F "UseBackQ tokens=1-2 delims== " %%a in ("%file%") do if "%%a"=="<FileLog>" set log_extended=%%b

Брал я ее с интернета и модифицировал, поэтому до конца не понимаю. Она должна в файле copy.log найти строчку начинающееся на <FileLog> и присвоить содержимое после искомой фразы переменной log_extended, т.е. на выходе log_extended=c:\temp\111\fastcopy341\Log\20180525-163855-0.log
 
В самом примере работает, но как только добавляю проверку наличия файла, так сразу log_extended становиться пустой.
 
Т.е.

Код:
SetLocal EnableExtensions
set file=C:\Temp\111\FastCopy341\copy.log
For /F "UseBackQ tokens=1-2 delims== " %%a in ("%file%") do if "%%a"=="<FileLog>" set log_extended=%%b

Отрабатывает нормально, а  

Код:
SetLocal EnableExtensions
set file=C:\Temp\111\FastCopy341\copy.log
:: Проверка доступности файла
if exist "%file%" (
    echo Файл есть
For /F "UseBackQ tokens=1-2 delims== " %%a in ("%file%") do if "%%a"=="<FileLog>" set log_extended=%%b
    echo Значение log_extended= %log_extended%
) else (
    echo Файла нет
)
exit

Уже показывает:

Код:
Доступна
Файл есть
Значение log_extended

Помогите разобраться.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 17:06 25-05-2018 | Исправлено: Falcon99, 17:09 25-05-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99

Цитата:
Помогите разобраться.

Да разобраться-то плевое дело... тут другой вопрос, зачем столько стороннего хлама? FastCopy, blat - всё это заменить может powershell. И скопирует, и удалит, и лог запишет, и прочитает его, и почту отправит куда надо...
Ок, если сильно надо, то исправьте свой код так:

Код:
@echo off
setlocal enabledelayedexpansion
set "file=C:\Temp\111\FastCopy341\copy.log"
:: Проверка доступности файла
if exist "%file%" (
    echo Файл есть
For /F "UseBackQ tokens=1-2 delims== " %%a in ("%file%") do if "%%a"=="<FileLog>" set "log_extended=%%b"
    echo Значение log_extended= !log_extended!
) else (
    echo Файла нет
)
pause&exit /b

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 22:09 25-05-2018 | Исправлено: YuS_2, 22:11 25-05-2018
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Да разобраться-то плевое дело... тут другой вопрос, зачем столько стороннего хлама?  FastCopy, blat - всё это заменить может powershell. И скопирует, и удалит, и лог запишет, и прочитает его, и почту отправит куда надо...  

 
PowerShell просто мне совсем неизвестен, а c cmd дело имел, просто привычка.
 
Если не сложно объясните почему переменную надо "!", а не в "%" заключать? И в каких случаях надо делать именно так, а то как я понял именно в этом была моя ошибка.
 
P.s. Плюс у меня с другим скриптом была непонятная проблема, на XP отрабатывал без проблем, а на семерке вообще не выполнялся, причину так и не понял. В скрипте, запускаемом с сетевого диска, была распаковка архива 7zip на диск D и копирование файла на рабочий стол, но на семерке ни одно из этих действий не выполнялось. Скрипт запускался из=под пользователя с правами администратора, UAC отключен.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 09:23 26-05-2018 | Исправлено: Falcon99, 09:28 26-05-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99

Цитата:
Если не сложно объясните почему переменную надо "!", а не в "%" заключать? И в каких случаях надо делать именно так, а то как я понял именно в этом была моя ошибка.

во-первых, чтобы использовать !-раскрытие, необходимо включать отложенное расширение переменных,т.е.:

Код:
setlocal enabledelayedexpansion

во-вторых, для того, чтобы использовать изменяемые значения переменных внутри оператора "скобки", обязательно используется !-раскрытие, т.к. переменные с %-раскрытием, принимают значения этих переменных, имеющиеся ДО входа в блок операторов "скобки". При отсутствии таких значений переменных, они принимают значение nul
для демонстрации:

Код:
@echo off
setlocal enabledelayedexpansion
set "x=1"
set "y="
(
 set "x=222"
 set "y=333"
 set "z=444"
 echo.x="%x%", x="!x!"
 echo.y="%y%", y="!y!"
 echo.z="%z%", z="!z!"
)
pause&exit /b


Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 10:00 26-05-2018 | Исправлено: YuS_2, 10:01 26-05-2018
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Теперь все понятно, а т.к. enabledelayedexpansion  никогда ранее не использовал, то поэтому таких тонкостей и не знал. Еще раз спасибо.
 
P.s. Насчет замены FastCopy. Изначально скрипт был на robocopy. Но копирование происходило медленно, а так файлы на копирование более 65Гб., то это не нравилось. Сделал пример копирование robocopy, xcopy, copymik и fastcopy. Победила последняя утилита, да файл отчета у нее нормальный. Именно для того чтобы его получить пришлось городить то что выше.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 12:32 26-05-2018 | Исправлено: Falcon99, 19:09 26-05-2018
Fludogenerator



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите с решением  
После установки системы, некоторые папки на диске "Д" недоступны.  Чтобы каждый раз вручную не тыкать на папки попробовал сделать так: ICACLS "D:\*" /reset /t /c /l /q  
Заработать заработало, но когда захожу на диск пишет "повреждена корзина" Дальше все работает пока без ошибок. Такой способ можно использовать или лучше найти другой способ решении проблемы

Всего записей: 29 | Зарегистр. 24-06-2017 | Отправлено: 10:57 30-05-2018
Eternal07



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
Имеется файл config.xml, в котором содержится строчка "value="|&#20008;". При попытке заменить скриптом другие строчки в этом файле, Powershell заменяет этот иероглиф на "?". Как этого избежать? Кодировка UTF-8.

Всего записей: 101 | Зарегистр. 21-12-2007 | Отправлено: 12:44 31-05-2018
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Eternal07
Показывайте скрипт

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:21 31-05-2018
Eternal07



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Показывайте скрипт

(Get-Content -Path D:\Script\config.xml) | Foreach-Object {
    $_ -replace 'use-boast-event" value="true"', 'use-boast-event" value="false"' `
       -replace 'use-megaphone" value="true"', 'use-megaphone" value="false"' `
} | Set-Content D:\Script\config.xml
 
После этого в файле два иероглифа заменяются вопросами.
https://i.imgur.com/s2eQq7A.png

Всего записей: 101 | Зарегистр. 21-12-2007 | Отправлено: 13:50 31-05-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eternal07

Цитата:
Имеется файл config.xml

В общем-то, с xml именно, в powershell по-другому лучше работать, но если даже так, как используется у Вас, то вот эти части:

Цитата:
Get-Content -Path D:\Script\config.xml


Цитата:
Set-Content D:\Script\config.xml

надо, как минимум, записать с соответствующей кодировкой:

Код:
Get-Content -Path D:\Script\config.xml -enc UTF8|...


Код:
...|Set-Content D:\Script\config.xml -enc UTF8

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:14 31-05-2018
ERG73

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
Нужно написать с помощью cmd/bat файла парсинг и редактирование txt-файла
 
Текстовый файл:
-вапавпаждлждм вапапва
-ввам вава авпав апаа авап, авпавп апав
-вапавпва
+авпавп апавпа, авпапв - апавав
+апавп
+вапав павпав апавпав павпавп авпвапва
 
Задача:  
Создать измененный текстовый файл:
1.Если строка начинается на - переносим ее без изменения
2.Если строка начинается на + и имеет всего один пробел (2 слова) переносим без изменения
3.Если строка начинается на + и имеет "," , заменяем на ", " (с пробелом) и все остальное переносим без изменения
4.Если строка начинается на + и не удовлетворяет 2,3 условию, то последний  пробел заменяем двойным пробелом  

Всего записей: 298 | Зарегистр. 06-11-2004 | Отправлено: 18:01 03-06-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ERG73

Цитата:
Нужно написать с помощью cmd/bat

Т.е. накачать колесо от БелАЗ-а, требуется именно ручным насосом от велосипеда? Понятно.
 
Но с условиями разберитесь, ибо там есть варианты...
Например: пробелы в конце строк учитывать или они гарантированно отсутствуют? Или: "," меняется на ", " при любых условиях, либо только если пробел отсутствует? И т.п.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 00:40 04-06-2018
ERG73

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Пробелов в конце нет
"," меняется на ", " при любых условиях

Всего записей: 298 | Зарегистр. 06-11-2004 | Отправлено: 23:11 04-06-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ERG73
Осталось выяснить насколько это условие жесткое:

Цитата:
написать с помощью cmd/bat

?  
В смысле, зачем именно на cmd/bat?

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 00:56 05-06-2018
ERG73

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Просто я смогу потом сам изменять условия редактирования
 
А что посоветуешь?

Всего записей: 298 | Зарегистр. 06-11-2004 | Отправлено: 09:12 05-06-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ERG73

Цитата:
А что посоветуешь?

powershell
script.ps1

Код:
gc test.txt -enc default|%{
    if($_ -match "^\+\w+\W+\w+"){
        if($_ -match '^\+\w+ \w+$'){$_}
        elseif ($_ -match ','){
            $_ -replace ',',', '
        }
        else {$_ -replace ' (?=\w+$)','  '}
    } elseif ($_ -match '^-'){
        $_
    }
}

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:44 05-06-2018
ERG73

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Спасибо
 
А еще такой вопрос:
в файле primer1.txt есть строка
аааяваваяавава аваяв  
 
Пишу в bat-нике:
set verfile=primer1.txt
for /f "delims=" %%a in (%verfile%) do (
  for %%i in (%%a) do (
  .....
 )
)
 
Так буквы "я" считаются как пробелы и по ним во втором for идет разделение строки по словам как по пробелу так и по букве "я"
В чем может быть проблема?  

Всего записей: 298 | Зарегистр. 06-11-2004 | Отправлено: 21:46 05-06-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ERG73

Цитата:
В чем может быть проблема?

Проблема в самом cmd и наличии кучи кодировок, с которыми ему работать достаточно хлопотно, а именно: батник в кодировке 866, консоль тоже, а текст, с вероятностью 99,9% имеет кодировку - 1251...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 22:27 05-06-2018
romby



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачка. Требуется на VBS сформировать случайное 12-значное hex-число (MAC-адрес) в формате XYXXXXXXXXXX, где на месте X - любые случайные hex-цифры (значения от 0 до F), а на месте Y – случайная hex-цифра из четырёх допустимых значений – 2, 6, A, E.

Всего записей: 1792 | Зарегистр. 09-02-2006 | Отправлено: 22:59 06-06-2018 | Исправлено: romby, 23:04 06-06-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru