Пакетная зачистка текста из набора / п - PullRequest
4 голосов
/ 03 ноября 2011

Есть ли в любом случае удалить «текст» из строки, установленной с set /p=Command?

Например, я делаю пакетную игру, и одна из команд сохранить.

Есть ли способ удалить слово Сохранить, и если что-то осталось, установите его как ТЕСТ, а затем назовите файл% TEST%

Ответы [ 2 ]

6 голосов
/ 03 ноября 2011

Если я правильно понимаю, вы хотите, чтобы переменная %TEXT%, содержащая Save filename, была преобразована в filename. Использование:

Set TEXT=%TEXT:Save =%

Раздел после двоеточия является выражением поиска и замены. Первое вхождение текста слева от = заменяется текстом справа. В этом случае «Сохранить» (с завершающим пробелом) заменяется ничем. Это без учета регистра, поэтому заглавные буквы не имеют значения.

Редактировать: Отвечая на комментарий ниже:

Чтобы получить все до первого пробела (начальные пробелы игнорируются), вы можете написать функцию:

:FirstTerm
Set TEXT=%1
Exit /B

и вызвать его из того же пакетного файла с:

Call :FirstTerm %TEXT%
0 голосов
/ 10 марта 2017

Простой ответ - использовать буквы, как упомянуто выше, но все остальное элементарно, если вы знаете, сколько символов нужно удалить перед запросом. Ниже приведен пример с различными способами манипулирования текстом с использованием переменных. Краткий ответ таков:

 @echo off
 set phrase=Some other phrase
 echo %phrase:~11,6%
 pause

Этот скрипт установит переменную «фраза» в «Некоторая другая фраза» Вы можете получить доступ к остальному тексту фразы, используя: ~ переход к одиннадцатому символу фразы и отображение следующих 6 символов после этого. Помните, что пробелы - это символы, а слово «фраза» имеет длину 6 символов.

Более длинная версия, которую в моем примере используется для прописных букв первой буквы слова, использует это, чтобы показать, как манипулировать словами в тексте или переменных.

 goto :top
 :end
 echo.
 pause
 goto :EOF

 :top
 echo.
 SETLOCAL ENABLEDELAYEDEXPANSION
 ::Prompt for Name and set to variable "a"
 set /p a=Enter Name :
 echo.
 ::Set "aName" to the result of what was typed at the prompt.
 SET aName=%a%

 ::Set the First letter of  "aName" to a new variable "firstletter" the 0,1  is the first character (0) 1 character long(1)
 set firstletter=%aName:~0,1%

 ::Set the variable "theRest" to the second character of "aName" to the 44th or whatever you choose 
 ::pneumonoultramicroscopicsilicovolcanoconiosis is the longest word in the dictionary 45 characters long
 set theRest=%aName:~1,44%

 :: display the full name as 2 variables the first letter and the rest of the word/name
 echo %firstletter%%theRest% is what you typed the first letter is "%firstletter%"
 echo.
 CALL :UCase firstletter fl
 CALL :LCase therest tr
 echo %fl% being the uppercase first letter you typed
 echo.
 echo %fl%%aName:~1,44% is the uppercase first and the rest of the word as typed.
 echo.
 echo %fl%%tr% is the Uppercase first letter and all lowercase for the rest of the word.
 echo.
 echo %fl%%tr% >>%userprofile%\desktop\uppercaseresults.txt
 echo.
 echo A file named "uppercasereults.txt" was created on the desktop 
 echo.
 echo with the name you typed above capitalized.
 CALL :UCase aName newName
 echo.
 ECHO.%newName% In all UPPERCASE
 echo.
 CALL :LCase aName newName
 ECHO.%newName% in all LOWERCASE

 ENDLOCAL
 goto end


 :LCase
 :UCase
 :: Converts to upper/lower case variable contents
 :: Syntax: CALL :UCase _VAR1 _VAR2
 :: Syntax: CALL :LCase _VAR1 _VAR2
 :: _VAR1 = Variable NAME whose VALUE is to be converted to upper/lower case
 :: _VAR2 = NAME of variable to hold the converted value
 :: Note: Use variable NAMES in the CALL, not values (pass "by reference")

 SET _UCase=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 SET _LCase=a b c d e f g h i j k l m n o p q r s t u v w x y z
 SET _Lib_UCase_Tmp=!%1!
 IF /I "%0"==":UCase" SET _Abet=%_UCase%
 IF /I "%0"==":LCase" SET _Abet=%_LCase%
 FOR %%Z IN (%_Abet%) DO SET _Lib_UCase_Tmp=!_Lib_UCase_Tmp:%%Z=%%Z!
 SET %2=%_Lib_UCase_Tmp%
 goto :EOF
 :EOF
 goto :end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...