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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

KLASS



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

PowerShell
Версии | Ассоциация и подпись сценариев
 
Прочее
  • Если используете "белый список" в брандмауэре Windows, то для работы сценариев в сети необходимо создать 2 исходящих правила для svchost.exe и PowerShell.exe.
  • В отличие от батников, кодировка скриптов на PowerShell должна быть 1251 (ANSI). Начиная с версии PowerShell Core 6.0, кодировка по умолчанию UTF8NoBOM.
Расширение возможностей
Функции
Write-Color
Провайдеры
Готовые скрипты
Ошибки и предупреждения в журнале событий по электронной почте (в4.0)
Преобразование алиасов в скриптах к полным командам.
Получение детализированной информации из файлов.
 
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?

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

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

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

Всего записей: 7219 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS_2, 10:11 03-07-2018
radeonuser

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

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



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

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

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



Advanced 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

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



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

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

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

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



Advanced 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


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



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

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



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

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

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

Всего записей: 98 | Зарегистр. 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

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



Advanced 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

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

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

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



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

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

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

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

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

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



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

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

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

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

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

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



Advanced 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 '^-'){
        $_
    }
}

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

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

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



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

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

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

Всего записей: 1971 | Зарегистр. 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.

Всего записей: 1693 | Зарегистр. 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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru