无论如何都要从使用set /p=Command?
例如,我正在进行批量游戏,其中一个命令是保存。
有没有办法删除单词“保存”,如果还有剩余内容,则将其设置为“测试”,然后将文件命名为“%TEST%”
答案 0 :(得分:6)
如果我理解正确,您希望将包含%TEXT%
的变量Save filename
转换为filename
。使用:
Set TEXT=%TEXT:Save =%
冒号后面的部分是搜索和替换表达式。 =
左侧文本的第一个出现位置被右侧的文本替换。在这种情况下,“保存”(带有尾随空格)将被替换为空。这是不区分大小写的,因此大写并不重要。
修改:回复以下评论:
要在第一个空格(忽略前导空格)之前检索所有内容,您可以编写一个函数:
:FirstTerm
Set TEXT=%1
Exit /B
并使用以下命令从同一个批处理文件中调用它:
Call :FirstTerm %TEXT%
答案 1 :(得分:0)
简单的答案是使用上面提到的字母,但如果你知道要在查询前删除多少个字符,其余的都是基本的。下面是一个使用变量操作文本的不同方法的示例。简短的回答如下
@echo off
set phrase=Some other phrase
echo %phrase:~11,6%
pause
此脚本将设置变量"短语" to"其他一些短语" 您可以使用以下内容访问短语中的其余文本:〜跳到短语的第11个字符,然后显示后面的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