![]() |
Слова вводимые пользователем разбить на части и присвоить переменным
Нужно запросить у пользователя ввод текста, разбить текст на части (пробел означает новая часть) и каждую часть присвоить отдельной переменной, значение которой будет являться именем файла, то есть на каждое слово будет создаваться один файл.
Слов может быть до 16 штук. Можно через Powershell или любой другой инструмент который есть на Win10? можно даже будет скачать что-нибудь. Самое главное чтобы можно было это записать в файлик и при запуске срабатывал сценарий. Как я это представляю: Код:
set /P project_name="Files: " Код:
*магический код* Всем спасибо за любые советы и подсказки. P.S Еще дополнительный вопрос появился, возможно ли запускать программу из BAT и сразу закрывать окно после этого? Я знаю что можно запускать exe через start, но у меня специальная команда "code ." которая запускает программу vscode с уже открытой папкой (откуда вызвали саму программу), и после нее батник приходится закрывать вручную, либо окно закрывается когда я закрываю visual studio code. |
Пакетный файл
Код:
@echo off Скрипт WSH
Код:
Option Explicit Цитата:
|
Цитата:
Код:
$ext = ".html" Цитата:
Код:
start "" cmd /c "echo здесь могли быть команды для запуска&pause" |
Цитата:
Код:
( Сейчас снова решил попробовать, вставил вместо "code ." "cmd /c start /D "C:\Users\1234\AppData\Local\Programs\Microsoft VS Code" Code.exe" и все заработало точно так-же) странно.. (я не разбираюсь что означают все эти префиксы и прочее, видимо в прошлый раз я команду брал из другого источника и что-то там было написано по другому, сам я это не пишу, все беру из интернета) В общем проблема решилась сама собой:) И возможно вы знаете как правильно сохранить файл чтобы мне в начале убрать эту надоедливую скобку. Я ее туда поставил из-за кодировки файла, потому что на первую команду почему-то вставляется "я╗┐" скриншот (в самом файле нет этих символов, они именно если запускать батник появляются) По поводу сценария, спасибо большое, все работает. Но не совсем понял куда нужно прописать путь, чтобы он клал файлы не туда откуда вызвался батник, а относительно него по пути: "%project_name%\src\template\" |
Цитата:
В общем, батники сохраняйте в кодировке cp866 (OEM) и тогда таких проблем не будет возникать. Цитата:
|
Цитата:
|
просто решу это при помощи cd
|
Цитата:
Код:
$ext = ".html" Цитата:
|
Цитата:
Код:
[environment]::ExpandEnvironmentVariables('%SystemRoot%\System32') |
Цитата:
В том смысле, что powershell-у неизвестно ничего о существовании такой переменной. Можно просто через батник вызвать powershell сценарий и там же передать сценарию значение этой переменной... |
zerdox@vk,
В личке лучше не решать задачи, тут больше людей, которые всегда могут подсказать какой-либо другой вариант и возможно он будет лучшим. В общем, примерно так: script.ps1 - кодировка utf8 Код:
param( Код:
powershell -c "&{.\script.ps1 -path '%project_name%\src\template\'}" Если в этой переменной присутствует относительный путь, то во избежание различных коллизий, лучше привести путь к абсолютному, т.к. не проверял скрипт на работу с относительными путями... Путь к скрипту powershell можно тоже заменить на абсолютный, если потребуется. |
Скрытый текст
![]() Что-то не так сделал? Скрытый текст
![]() |
Цитата:
Цитата:
кроме того, в переменной %project_name% у Вас в наличии только имя каталога и в итоге, путь получается относительным. Сначала необходимо привести его к абсолютному и потом подставлять в строку запуска скрипта. Примерно так: Код:
set "abs=z:\абсолютный_путь_к_каталогам_проектов\%project_name%\src\template\" |
Цитата:
|
Цитата:
По Вашим скринам это можно увидеть: Если скрипт лежит у Вас в каталоге: Код:
C:\User\1234\Desktop\projects Код:
C:\User\1234\Desktop\projects\test1 Код:
powershell -c "&{.\script.ps1}" Код:
powershell -c "&{..\script.ps1}" Цитата:
|
В общем разобрался, вот результаты:
Вывод консоли
C:\Users\1234\Desktop\projects>git clone https://github.com/ZerdoX-x/project.git Cloning into 'project'... remote: Enumerating objects: 15468, done. remote: Counting objects: 100% (15468/15468), done. remote: Compressing objects: 100% (10696/10696), done. remote: Total 15468 (delta 4201), reused 15463 (delta 4196), pack-reused 0 Receiving objects: 100% (15468/15468), 16.17 MiB | 6.92 MiB/s, done. Resolving deltas: 100% (4201/4201), done. C:\Users\1234\Desktop\projects>set /P project_name="Project Name is - " Project Name is - test C:\Users\1234\Desktop\projects>Powershell.exe -executionpolicy remotesigned -File script.ps1 Sections: a b c d Каталог: C:\Users\1234\Desktop\projects\project\src\template Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 03.08.2019 17:22 71 a.html -a---- 03.08.2019 17:22 71 b.html -a---- 03.08.2019 17:22 71 c.html -a---- 03.08.2019 17:22 71 d.html Каталог: C:\Users\1234\Desktop\projects\project\src\styles\sections Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 03.08.2019 17:22 6 a.sass -a---- 03.08.2019 17:22 6 b.sass -a---- 03.08.2019 17:22 6 c.sass -a---- 03.08.2019 17:22 6 d.sass C:\Users\1234\Desktop\projects>ren "project" "test" C:\Users\1234\Desktop\projects>ren *.psd "test".psd Не удается найти указанный файл. C:\Users\1234\Desktop\projects>move *.psd "test\psd" Файл с таким именем уже существует или не найден. C:\Users\1234\Desktop\projects>cd test C:\Users\1234\Desktop\projects\test>rd /S /Q .git C:\Users\1234\Desktop\projects\test>del /F /Q psd\.gitkeep.txt src\fonts\.gitkeep.txt src\img\.gitkeep.txt C:\Users\1234\Desktop\projects\test>powershell -Command "(gc .\src\index.html) -replace '<title>Title</title>', '<title>test</title>' | Out-File -encoding ASCII index.html" C:\Users\1234\Desktop\projects\test>Choice /M "Download jQuery?" Download jQuery? [Y,N]?Y C:\Users\1234\Desktop\projects\test>If Errorlevel 2 Goto No C:\Users\1234\Desktop\projects\test>If Errorlevel 1 Goto Yes C:\Users\1234\Desktop\projects\test>call npm i jquery --save-dev > node-sass@4.12.0 install C:\Users\1234\Desktop\projects\test\node_modules\node-sass > node scripts/install.js Cached binary found at C:\Users\1234\AppData\Roaming\npm-cache\node-sass\4.12.0\win32-x64-72_binding.node > node-sass@4.12.0 postinstall C:\Users\1234\Desktop\projects\test\node_modules\node-sass > node scripts/build.js Binary found at C:\Users\1234\Desktop\projects\test\node_modules\node-sass\vendor\win32-x64-72\binding.node Testing binary Binary is fine > gifsicle@4.0.1 postinstall C:\Users\1234\Desktop\projects\test\node_modules\gifsicle > node lib/install.js √ gifsicle pre-build test passed successfully > jpegtran-bin@4.0.0 postinstall C:\Users\1234\Desktop\projects\test\node_modules\jpegtran-bin > node lib/install.js √ jpegtran pre-build test passed successfully > optipng-bin@5.1.0 postinstall C:\Users\1234\Desktop\projects\test\node_modules\optipng-bin > node lib/install.js √ optipng pre-build test passed successfully npm WARN activebox@1.0.0 No description npm WARN activebox@1.0.0 No repository field. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules\fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"}) + jquery@3.4.1 added 935 packages from 623 contributors and audited 14350 packages in 59.608s found 0 vulnerabilities Код start_project.bat
git clone https://github.com/ZerdoX-x/project.git set /P project_name="Project Name is - " Powershell.exe -executionpolicy remotesigned -File script.ps1 ren "project" "%project_name%" ren *.psd "%project_name%".psd move *.psd "%project_name%\psd" cd %project_name% rd /S /Q .git del /F /Q psd\.gitkeep.txt src\fonts\.gitkeep.txt src\img\.gitkeep.txt powershell -Command "(gc .\src\index.html) -replace '<title>Title</title>', '<title>%project_name%</title>' | Out-File -encoding ASCII index.html" Choice /M "Download jQuery?" If Errorlevel 2 Goto No If Errorlevel 1 Goto Yes Goto End :No call npm i Goto End :Yes call npm i jquery --save-dev cd src\js\ echo //= ../../node_modules/jquery/dist/jquery.min.js > script.js cd ..\..\ :End code . Код script.ps1
param( [string]$html_path = 'project\src\template\', [string]$sass_path = 'project\src\styles\sections\', [string]$html = ".html", [string]$sass = ".sass" ) if (!(test-path $html_path)){ write-host Такого пути не существует. Создаем каталог $html_path -for red mkdir $html_path|out-null } if (!(test-path $sass_path)){ write-host Такого пути не существует. Создаем каталог $sass_path -for red mkdir $sass_path|out-null } $sections = read-host "Sections" [array]$sections = $sections.split() $sections|ForEach-Object{New-Item -p $html_path -n ("$_"+$html) -it 'file' -v @" <section id="$_"> <div class="content"> </div> </section> "@ } $sections|ForEach-Object{New-Item -p $sass_path -n ("$_"+$sass) -it 'file' -v @" #$_ "@ } Все работает, как и ожидалось. Единственное - консоль сама не закрывается, все равно приходится после открытия vscode закрывать окно консоли вручную, нашел решение, но для меня оно к сожалению не сработало, заменив строку Код:
code . Код:
Start "" "C:\Users\1234\AppData\Local\Programs\Microsoft VS Code\Сode.exe" <.>\. Скрытый текст
![]() У exe'шника стоят все разрешения и у корневой папки тоже. Пробовал запускать bat с правами администратора, или через cmd (тоже с правами администратора) - результат один. Тут скорее всего проблема в настройках винды, а не в программе которую я пытаюсь запустить. Возможно есть идеи? |
Цитата:
Code.exe и Сode.exe - это два разных файла, если что. |
Цитата:
Еще смущает что в консоли Код:
Start "" "C:\Users\1234\AppData\Local\Programs\Microsoft VS Code\Code.exe" 0<. 1>\. Код:
Start "" "C:\Users\1234\AppData\Local\Programs\Microsoft VS Code\Code.exe" <.>\. Или это нормально, раз вы ничего не сказали по этому поводу? Могу лишь догадываться что проблема снова в кодировке. Я готов пожертвовать первой строчкой и вставить туда какой-нибудь символ, если oem 866 уже не подходит) |
Цитата:
Цитата:
|
Цитата:
Код:
Start "" "C:\Users\1234\AppData\Local\Programs\Microsoft VS Code\Code.exe" . Странно, как редактор кода понимает то, что ему передали через консоль? Это как-то предусмотрено в самой программе? У меня были мысли просто так-же запустить exe через старт и после пути к приложению добавить точку как аргумент который принимается за путь (точно так же как в команде "code .") но я посчитал это глупой идеей. Да и в любом случае я бы не догадался до "пустых" кавычек перед путем, фиг его знает что это означает, в комментарии кстати писали на stackoverflow что именно эта часть была упущением у кого-то. Цитата:
Код:
Start "" "C:\Users\1234\AppData\Local\Programs\Microsoft VS Code\Code.exe" . Странно, как редактор кода понимает то, что ему передали через консоль? Это как-то предусмотрено в самой программе? У меня были мысли просто так-же запустить exe через старт и после пути к приложению добавить точку как аргумент который принимается за путь (точно так же как в команде "code .") но я посчитал это глупой идеей. Да и в любом случае я бы не догадался до "пустых" кавычек перед путем, фиг его знает что это означает, в комментарии кстати писали на stackoverflow что именно эта часть была упущением у кого-то. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
start /?
Код:
Запуск указанной программы или команды в отдельном окне. В данном случае, это особенность поведения внутренней команды start: она рассматривает всё, что содержится в кавычках, как параметр «заголовок». Именно поэтому, если у нас путь к исполняемому файлу заключается в кавычки, нам приходится добавлять параметр заголовок (в Вашем случае пустой — просто две кавычки). |
Время: 00:03. |
Время: 00:03.
© OSzone.net 2001-