Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Слова вводимые пользователем разбить на части и присвоить переменным

Ответить
Настройки темы
CMD/BAT - Слова вводимые пользователем разбить на части и присвоить переменным

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Нужно запросить у пользователя ввод текста, разбить текст на части (пробел означает новая часть) и каждую часть присвоить отдельной переменной, значение которой будет являться именем файла, то есть на каждое слово будет создаваться один файл.
Слов может быть до 16 штук.
Можно через Powershell или любой другой инструмент который есть на Win10? можно даже будет скачать что-нибудь. Самое главное чтобы можно было это записать в файлик и при запуске срабатывал сценарий.
Как я это представляю:
Код: Выделить весь код
set /P project_name="Files: "
*пользователь вводит: advantages works about portfolio order call*
Код: Выделить весь код
*магический код*
*Создалось 6 файлов: advantages.html works.html about.html portfolio.html order.html call.html*

Всем спасибо за любые советы и подсказки.

P.S Еще дополнительный вопрос появился, возможно ли запускать программу из BAT и сразу закрывать окно после этого? Я знаю что можно запускать exe через start, но у меня специальная команда "code ." которая запускает программу vscode с уже открытой папкой (откуда вызвали саму программу), и после нее батник приходится закрывать вручную, либо окно закрывается когда я закрываю visual studio code.

Отправлено: 21:34, 01-08-2019

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Пакетный файл
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /p "sProjectNames=Enter project names: "

if defined sProjectNames for %%i in (%sProjectNames%) do >nul copy /y nul "%%~i.html" && echo Create file [%%~i.html].|| echo Can't create file [%%~i.html].

endlocal
exit /b 0
Скрипт WSH
Код: Выделить весь код
Option Explicit

Dim strProjectNames
Dim strProjectName


With WScript.CreateObject("Scripting.FileSystemObject")
	If StrComp(.GetFileName(WScript.FullName), "wscript.exe", vbTextCompare) = 0 Then
		strProjectNames = Trim(InputBox("Enter project names:", "Enter project names"))
	Else
		WScript.StdOut.Write "Enter project names:"
		strProjectNames = Trim(WScript.StdIn.ReadLine())
	End If
	
	If Len(strProjectNames) > 0 Then
		For Each strProjectName In Split(strProjectNames)
			.CreateTextFile(strProjectName & ".html", True).Close
			WScript.Echo "Create file [" & strProjectName & ".html]."
		Next
	End If
End With

WScript.Quit 0

Цитата zerdox@vk:
но у меня специальная команда "code ." »
Расскажите про это подробнее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:16, 01-08-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1218
Благодарности: 509

Профиль | Отправить PM | Цитировать


Цитата zerdox@vk:
Можно через Powershell »
Код: Выделить весь код
$ext = ".html"
#Содержимое файлов:
$html = @'
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
    window.onbeforeunload = function() {
        return ''
    }
</script>
<SCRIPT>
function kill(){window.close ();}
</SCRIPT>
</head>
<body>
<h1>Закрой меня!</h1>
<h1>Так:</h1>
<br>
<input type=button name = Ы value = "Нажмите" onClick=kill()>
<br>
<h1>Или так:</h1>
<a href="#" onClick="parent.self.close(); return false">Закрытие страницы</a>
</body>
</html>
'@

$var = read-host "Files"
[array]$var = $var.split()
$var|%{new-item -n ("$_"+$ext) -it 'file' -v $html}
Цитата zerdox@vk:
Я знаю что можно запускать exe через start »
через старт можно запускать всё, что запускаемо...
Код: Выделить весь код
start "" cmd /c "echo здесь могли быть команды для запуска&pause"

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:22, 02-08-2019 | #3


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
Расскажите про это подробнее. »
Есть редактор кода Visual Studio Code, где я и работаю. У меня есть в папке проектов батник, который автоматизирует создание нового проекта, если интересно то вот его содержимое:
Код: Выделить весь код
(
git clone https://github.com/ZerdoX-x/project.git

set /P project_name="Project Name is -  "
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
del /F /Q src\fonts\.gitkeep.txt
del /F /Q src\img\.gitkeep.txt

cd src
powershell -Command "(gc index.html) -replace '<title>Title</title>', '<title>%project_name%</title>' | Out-File -encoding ASCII index.html"
cd ..\

code .
И мне нужно чтобы после последней команды окно автоматически закрывалось, а не дожидалось закрытия vscode. Команду я взял отсюда, из официальной документации. Вся суть в том что эта команда запускает редактор с уже открытой папкой, откуда ее запустили. Если я буду запускать просто как exe файл, командой start и тогда командная строка не будет дожидаться завершения программы, но мне придется вручную заходить в папку нового проекта. А тут я именно указываю директорию относительно места, где запустился vscode - в моем случае это корневая директория - "."
Вот когда я запускаю программу через code . - скриншот
А когда я запускаю просто как exe, у меня открывается папка в которой лежит программа.

Сейчас снова решил попробовать, вставил вместо "code ." "cmd /c start /D "C:\Users\1234\AppData\Local\Programs\Microsoft VS Code" Code.exe" и все заработало точно так-же) странно.. (я не разбираюсь что означают все эти префиксы и прочее, видимо в прошлый раз я команду брал из другого источника и что-то там было написано по другому, сам я это не пишу, все беру из интернета)
В общем проблема решилась сама собой
И возможно вы знаете как правильно сохранить файл чтобы мне в начале убрать эту надоедливую скобку. Я ее туда поставил из-за кодировки файла, потому что на первую команду почему-то вставляется "я╗┐"
скриншот (в самом файле нет этих символов, они именно если запускать батник появляются)

По поводу сценария, спасибо большое, все работает. Но не совсем понял куда нужно прописать путь, чтобы он клал файлы не туда откуда вызвался батник, а относительно него по пути:
"%project_name%\src\template\"

Последний раз редактировалось zerdox@vk, 02-08-2019 в 14:04.


Отправлено: 13:49, 02-08-2019 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1218
Благодарности: 509

Профиль | Отправить PM | Цитировать


Цитата zerdox@vk:
в самом файле нет этих символов, они именно если запускать батник появляются »
Это так называемый BOM, маркер последовательности байтов, по которому косвенно определяется кодировка файла. Это "невидимый" символ, который вставляют редакторы.
В общем, батники сохраняйте в кодировке cp866 (OEM) и тогда таких проблем не будет возникать.

Цитата zerdox@vk:
Но не совсем понял куда нужно прописать путь, чтобы он клал файлы не туда откуда вызвался батник, а относительно него по пути »
не совсем понятно про какой сценарий речь, здесь ведь весь топик в сценариях.

-------
scio me nihil scire. Ѫ


Отправлено: 15:02, 02-08-2019 | #5


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата YuS_2:
не совсем понятно про какой сценарий речь, здесь ведь весь топик в сценариях. »
Так куда все такие прописать папку? Это окончательный мой вопрос, все остальное я понял. Спасибо всем еще раз.

Отправлено: 16:02, 02-08-2019 | #6


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


просто решу это при помощи cd

Отправлено: 16:51, 02-08-2019 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1218
Благодарности: 509

Профиль | Отправить PM | Цитировать


Цитата zerdox@vk:
Так куда все такие прописать папку? »
Если речь про мой сценарий, то вот так можно будет вводить путь к целевому каталогу:
Код: Выделить весь код
$ext = ".html"

#Содержимое файлов:
$html = @'
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
    window.onbeforeunload = function() {
        return ''
    }
</script>
<SCRIPT>
function kill(){window.close ();}
</SCRIPT>
</head>
<body>
<h1>Закрой меня!</h1>
<h1>Так:</h1>
<br>
<input type=button name = Ы value = "Нажмите" onClick=kill()>
<br>
<h1>Или так:</h1>
<a href="#" onClick="parent.self.close(); return false">Закрытие страницы</a>
</body>
</html>
'@

#Путь к целевому каталогу:
$path = 'z:\Folder'

if (!(test-path $path)){md $path|out-null}
$var = read-host "Files"
[array]$var = $var.split()
$var|%{ni -p $path -n ("$_"+$ext) -it 'file' -v $html}
и это не батник, это сценарий powershell, здесь прописывать путь в таком виде:
Цитата zerdox@vk:
"%project_name%\src\template\" »
не получится.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 02-08-2019 в 17:18.


Отправлено: 17:10, 02-08-2019 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
здесь прописывать путь в таком виде:
Цитата zerdox@vk:
"%project_name%\src\template\" »
не получится. »
А если, как в WSH, принудительно раскрывать такую строку?
Код: Выделить весь код
[environment]::ExpandEnvironmentVariables('%SystemRoot%\System32')

Отправлено: 21:24, 02-08-2019 | #9


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1218
Благодарности: 509

Профиль | Отправить PM | Цитировать


Цитата Iska:
А если, как в WSH, принудительно раскрывать такую строку? »
если переменную вынести в системные, то можно, но там ведь локальная переменная, которая существует только в пределах batch-сценария.
В том смысле, что powershell-у неизвестно ничего о существовании такой переменной.
Можно просто через батник вызвать powershell сценарий и там же передать сценарию значение этой переменной...

-------
scio me nihil scire. Ѫ


Отправлено: 08:36, 03-08-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Слова вводимые пользователем разбить на части и присвоить переменным

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Присвоить переменным значения имен файлов в папке kopbetby Скриптовые языки администрирования Windows 5 10-10-2016 14:26
Прочее - Разбить архив на части venuko Общий по Linux 12 30-06-2015 09:38
VBS/WSH/JS - поиск слова в тексте и вывод части текста после искомого слова sergey23031978 Скриптовые языки администрирования Windows 9 18-02-2015 16:54
Как разбить страницу на части? alturgrey Вебмастеру 13 09-08-2010 16:29
[решено] Разбить mp3 на части samurai Видео и аудио: обработка и кодирование 3 08-01-2009 12:10




 
Переход