我需要一个Windows NT命令脚本来执行以下操作:
– 从命令行读取variablesstring
– 取出该variables,并根据每个单词的第一个字节创build新的string
Windows NT命令脚本中的传入string是%1
。 string的长度和字数可能有所不同,但总是以(something here) [something there]
。
示例 – 来自命令行的传入值(包括引号):
"This is my string for a new name (comment) [comment 2]"
我需要创build的string是:
Timsfann
这些字符来自上面string中每个单词的第一个字母,并在到达(comment)
的括号时停止。
上面的string将与date/时间string连接以创build唯一的文件名。 完成的string应该设置为系统variables,以便程序可以find完成的值。
任何帮助,将不胜感激。
我一直在尝试使用FOR
循环,但似乎无法让它按照需要工作。
只有几个方法可以做到这一点。
@echo off setlocal enabledelayedexpansion for /f "tokens=1 delims=(" %%G IN ("%~1") do set "line=%%G" FOR %%G IN (%line%) DO ( set tline=%%G set code=!code!!tline:~0,1! ) echo %code% pause
另一个! 虽然更简单和更短,但这种方法可能更难以理解… ;)
@echo off setlocal EnableDelayedExpansion set "str=%~1 " set "str=%str:(= " & rem % set "result=" set "word=%str: =" & set "result=!result!!word:~0,1!" & set "word=%" echo %result%
提示:使用echo on
执行它
@Crimsyn ,如果你理解起来更容易,下面是几种不使用延迟扩展或FOR语句的方法之一 :
@Echo Off Call :Loop %~1 Echo(%oStr%&Pause Exit/B :Loop If "%~1"=="" GoTo :EOF Set "iStr=%~1" If "%iStr:~,1%"=="(" GoTo :EOF Set "oStr=%oStr%%iStr:~,1%" Shift&GoTo Loop