从多字string的每个字的第一个字符创build新的string

我需要一个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