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

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

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

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.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Спасибо! А ведь до того же додумался ночью, но что-то отупел и решил пойти по пути наименьшего сопротивления, спросив на форуме.
Ты мне так расписал, как прямо на первой лекции КДиИИ как будто. Короче, надо было еще минут 10 подумать. Ха-ха.
 

Цитата:
В ночь на воскресенье превращаюсь

Если обратно не превратишься, готовим колья и факелы.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 12:38 07-06-2020
Yvaliko

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите люди добрые.
Есть 10 гигабайт файлов в папке с подпапками. И есть прога которая за раз обрабатывает один файл. Прога принимает два аргумента: имя файла на вход и имя файла которое вы хотите на выход.
И нужно как то прогнать все файлы и создать отдельную папку с теми же подпапками и теми же файлами, но пропущенными через прогу.
Т.е. есть папка C:\test1\ и нужно чтоб из нее все пересохранялось в D:\test2\
Если попался файл C:\test1\1\file то нужно положить его в D:\test2\1\file соответственно. И нужно это запилить через bat он же cmd.
Сперва думал, что на пару с гуглом справлюсь. Но вот уже второй день ничего не выходит.
Мысль была в том что бы взять полный путь до файла C:\test1\1\file, убрать из него source_dir="C:\test1\", то что осталось прилепить к destination_dir="D:\test2\" и получить D:\test2\1\file. В промежутке еще удалить имя файла и создать подпапку если надо.
Проблема в том что бы вырезать из одной переменной другую. Пробовал по всякому. И с setlocal enabledelayedexpansion и без, но пока результат нулевой.  

Код:
@set source_dir="C:\test1\"
@set destination_dir="D:\test2\"
 
@echo off  
setlocal enabledelayedexpansion
for /R %source_dir% %%f in (*.*) do (
echo %%f
echo %%~nf%%~xf
set str=%%f
set str=!str:%source_dir%=!
echo !str!
)
 

Что я делаю не так?

Всего записей: 770 | Зарегистр. 13-05-2008 | Отправлено: 17:46 07-06-2020
farag



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

Код:
 
Write-Host (' {0}. {1} ' -f ($i+1), $item)  
 

нельзя обойти без Write-Host (просто не выводит список), если результат функции сохранять в переменную. Хм, почему?..

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 00:20 08-06-2020 | Исправлено: farag, 01:13 08-06-2020
YuS 2



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

Цитата:
Что я делаю не так?

Описываете способ решения (возможно, неправильный), вместо описания задачи...
Непонятно, что там у Вас за программа для обработки, что именно она делает, что у неё на выходе?

Цитата:
Т.е. есть папка C:\test1\ и нужно чтоб из нее все пересохранялось в D:\test2\

Здесь можно понять только то, что Вам надо скопировать файлы из одного каталога в другой, с сохранением структуры. Для этого есть файловые менеджеры.
В общем, подробнее опишите алгоритм того, что в итоге требуется сделать...
 
farag

Цитата:
нельзя обойти без Write-Host (просто не выводит список), если результат функции сохранять в переменную. Хм, почему?..

Что именно сохраняется в переменную? Код посмотреть бы... возможно, область действия переменных влияет.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 09:00 08-06-2020
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
 
зря брюзжишь
даже я всё понял, хотя особо не вчитывался т.к. понятия не умею как рекурсивно обходить структуру папки в cmd, и иметь не хочу
 
Надо обработать все файлы внешней командой и положить результат по тому же относительному пути.  
Алгоритм здравый, но только религиозный приверженец cmd станет игнорировать повершел
 





Флейм

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 09:49 08-06-2020 | Исправлено: KLASS, 10:16 08-06-2020
iNNOKENTIY21



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

Цитата:
нельзя обойти без Write-Host (просто не выводит список), если результат функции сохранять в переменную. Хм, почему?..

Вопрос не понял.
работает же

Цитата:
$result = ShowMenu -Menu $DriveLetters -Default 0
 
"Вы выбрали $result"

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 13:21 08-06-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Да уже ночью выяснил, что Write-Output использовал вместо Write-Information. Отбой)

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 13:58 08-06-2020
iNNOKENTIY21



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

Цитата:
Да уже ночью выяснил, что Write-Output использовал вместо Write-Information. Отбой)

И на тебя кольев хватит

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 15:10 08-06-2020
Yvaliko

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

Цитата:
Описываете способ решения (возможно, неправильный), вместо описания задачи...  

Да вроде задачу описал. Передать программе на вход две текстовых строки с путем к исходному файлу и целевому. Может выбранный способ и неправильный, вот поэтому и спрашиваю.
Затык в модификации строковой переменной.

Цитата:
Непонятно, что там у Вас за программа для обработки, что именно она делает, что у неё на выходе?
Какой то конвертер. На входе снимок в каком то формате, на выходе он же в 14 битном png. Прога работает, но только с одним файлом за раз.

Цитата:
Алгоритм здравый, но только религиозный приверженец cmd станет игнорировать повершел

Это разовая задача и разбираться ради нее с нуля в повершелл желания нет. Да и просили сделать именно bat файл. Будь моя воля я бы на bash написал за 10 минут, но увы.
 
Проблема еще актуальна.

Всего записей: 770 | Зарегистр. 13-05-2008 | Отправлено: 15:19 08-06-2020
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yvaliko
Вы знаете толк в извращениях...    

Код:
@echo OFF
chcp 65001
 
::Рекурсивная обработка файлов абстрактной программой в вакууме
::©2020,Borland/www.imho.ws
 
::Папка с исходниками
set "Source_Dir=C:\test1"
::Папка под результат
set "Dest_Dir=D:\test2"
 
 
::Проверяем доступность папок
pushd "%Dest_Dir%" && popd || call :ABORT "Нет доступа к папке-получателю %Dest_Dir%"
pushd "%Source_Dir%" || call :ABORT "Нет доступа к папке-источнику %Source_Dir%"
 
for /f "delims=" %%A in ('dir /b /A:D *') do call :PROCESSFOLDER "%%~A" "%%~A"
for /f "delims=" %%B in ('dir /b /A:-D *') do call :PROCESSFILE "%%~B"
pause
popd
goto :EOF
 
:PROCESSFOLDER
pushd "%~1" || call :ABORT "Нет доступа к %~f1"
md "%Dest_Dir%\%~2" || call :ABORT "Невозможно создать папку %Dest_Dir%\%~2"
for /f "delims=" %%C in ('dir /b /A:D *') do call :PROCESSFOLDER "%%~C" "%~1\%%~C"
for /f "delims=" %%D in ('dir /b /A:-D *') do call :PROCESSFILE "%%~D" "%~2"
popd
goto :EOF
 
:PROCESSFILE
::Получаем имена файла-источника и файла назначения
set "Source_File=%~f1"
set "Target_File=%Dest_Dir%\%~2\%~1"
 
::Здесь вместо эха ставится потребная команда
echo Исходный файл: %Source_File%        Конечный файл: %Target_File%
goto :EOF
 
:ABORT
echo Аварийное завершение работы
echo %~1
pause
exit

 
P.S. В принципе, можно заменить вызов :PROCESSFILE на вызов сразу нужной команды. Оно чисто для наглядности...

----------
http://www.imho.ws

Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 18:05 08-06-2020 | Исправлено: BorlandIMHO, 18:05 08-06-2020
YuS 2



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

Цитата:
Передать программе на вход две текстовых строки с путем к исходному файлу и целевому.

Это уже ближе к делу... но описание проги, таки требуется. Что принимает на вход, что выдает на выход... в общем справка от команды - лучший вариант, или хотя бы описание, что за программа...

Цитата:
Прога работает, но только с одним файлом за раз.

Понятно. Вроде решение предложили - если не будет работать, отпишите - что-нибудь придумаем. Надо cmd - без проблем, задача несложная...
 
BorlandIMHO

Цитата:
Вы знаете толк в извращениях...

Это да...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:22 08-06-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Начитался тут: https://blog.netnerds.net/2016/01/showdialog-sucks-use-applicationcontexts-instead/ (код с сайта, чтобы удобнее копировать: https://pastebin.com/6DmtD0L7 )
 
1) Правда ли не стоит использовать .ShowDialog()?;
2) Попытался на своем примере испробовать (https://pastebin.com/ujBMa4yH), и все зависает после отработки.
 
Поискал другие примеры.
http://www.systanddeploy.com/2019/09/buld-powershell-systray-tool-with-sub.html
https://smsagent.blog/2016/04/27/creating-wpf-gui-applications-with-pure-powershell/
Тут вообще повторно запустить нельзя (Exception calling ".ctor" with "0" argument(s))

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 00:26 09-06-2020 | Исправлено: farag, 17:23 10-06-2020
NIKZZZZ



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

Цитата:
Что я делаю не так?

 
Уберите кавычки из переменных

Код:
@set source_dir=C:\test1\
@set destination_dir=D:\test2\
 
@echo off  
setlocal enabledelayedexpansion
for /R "%source_dir%" %%f in (*.*) do (
set infile=%%f
set outfile=%destination_dir%!infile:%source_dir%=!
echo !infile! ^> !outfile!
)
 

 
 
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 04:39 09-06-2020 | Исправлено: NIKZZZZ, 04:51 09-06-2020
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
Ваш вариант замечателен в своей лаконичности.
Собственно, когда я решал свою задачу, решением которой сейчас воспользовался в качестве "болванки" - примерно с такого и начинал.
А потом всплыли пробелы и воскл. знаки в именах, и пришлось "городить огород"...

----------
http://www.imho.ws

Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 12:40 09-06-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
Правда! Но дальше ShowDialog() не ходил.  Делать gui приложение на powershell, так себе, идея
Я бы вообще сказал, интерактив для скрипта, не есть хорошо, в крайнем случае спрашивать в начале, всё за раз.
Скрипт должен отрабатывать сам, автоматически, без пользователя.
А для настройки, передаваемые параметры в командной строке, или файл конфигурации.

 
А там ить какую то проблему решают, контекстное меню и икону в трее и т.д. Столкнулся с проблемами, хочешь трей, заморачивайся, а нет, дак и не стоит.
В общем создаём себе проблемы, пишем gui на powershell и героически их преодолеваем

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 13:52 09-06-2020
NIKZZZZ



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

Цитата:
А потом всплыли пробелы и воскл. знаки в именах, и пришлось "городить огород"...

Да какой огород, просто не надо использовать setlocal enabledelayedexpansion и правильно ставить кавычки, для примера
 

Код:
@set source_dir=C:\test1\
@set destination_dir=D:\test2\
 
@echo off
set/a level=1
:_1
for /f "tokens=%level%,* delims=\" %%a in ("%source_dir%") do set xx=%%b
if .%xx%==. goto :_2
set /a level +=1
goto :_1
 
:_2
for /f "tokens=%level%,* delims=\" %%a in ('dir /b /s /a:-d "%source_dir%"') do (
  echo %source_dir%%%b ^> %destination_dir%%%b
)


Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:05 09-06-2020
Yvaliko

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

Цитата:
The system cannot write to the specified device.

Так и не понял в чем проблема. Вроде даже подпапки создаются.
NIKZZZZ
Спасибо, после избавления от кавычек продвинулся дальше.

Код:
@set source_dir=C:\test1\
@set destination_dir=D:\test2\
 
@echo off  
setlocal enabledelayedexpansion
for /R "%source_dir%" %%f in (*.*) do (
set source_file=%%f
echo source_file is %source_file%
set filename=%%~nf%%~xf
echo filename is !filename!
set source_path=%%~df%%~pf
set subdirectory=!source_path:%source_dir%=%destination_dir%!
echo subdirectory is !subdirectory!
rem Create subsirectory if not exists
if not exist !subdirectory! mkdir !subdirectory!
set destination_file=!subdirectory!!filename!
rem Execute command
echo --src=!source_file! --dest=!destination_file!
)

Последнее эхо буду менять на вызов программы. В выходные только узнаю как отработает. Но на тестовых файлах все кроме имен с восклицательными знаками нормально выводится.
Второй вариант возьму как запасной.
 
Спасибо всем кто откликнулся.

Всего записей: 770 | Зарегистр. 13-05-2008 | Отправлено: 18:00 11-06-2020
farag



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

Код:
 
Invoke-WebRequest -Uri https://helpx.adobe.com/acrobat/kb/acrobat-dc-downloads.html -SessionVariable SavedSession -UseBasicParsing
Invoke-WebRequest -Uri https://helpx.adobe.com/acrobat/kb/acrobat-dc-downloads.html -WebSession $SavedSession -UseBasicParsing
 
$DownloadsFolder = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}"
$Parameters = @{
    Uri = "https://trials3.adobe.com/AdobeProducts/APRO/Acrobat_HelpX/win32/Acrobat_DC_Web_WWMUI.zip"
    OutFile = "$DownloadsFolder\Acrobat_DC_Web_WWMUI.zip"
    Verbose = [switch]::Present
    WebSession = $SavedSession
}
Invoke-WebRequest @Parameters
 

 
Решил вот скачать Acrobat Pro DC. Чтобы скачать архив, надо обязательно сначала открыть страницу

Код:
 
https://helpx.adobe.com/acrobat/kb/acrobat-dc-downloads.html  
 

и в новой вкладке уже можно вставить прямую ссылку. Короче, все равно пишет Access Denied. Я так понял, куки не сохраняются в сессии.
 
P.S.

Код:
 
-UseBasicParsing
 

использую, так как удален IE.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 01:03 13-06-2020 | Исправлено: farag, 01:04 13-06-2020
YuS 2



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

Цитата:
Решил вот скачать Acrobat Pro DC.

Попробуй прямые ссылки... их там # есть

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 10:53 13-06-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Я в курсе всего этого. Это единственная ссылка, по которой можно скачать. В этом и проблема.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 11:56 13-06-2020
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум 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