从多字词串的每个单词的第一个字符创建新字符串

时间:2017-10-23 23:37:25

标签: windows batch-file cmd

我需要Windows NT命令脚本来执行以下操作:
  - 从命令行读取变量字符串
  - 获取该变量并根据每个单词的第1个字节创建新字符串

Windows NT命令脚本中的传入字符串为%1。 字符串的长度和单词数可能不同,但始终以(something here) [something there]结尾。

示例 - 来自命令行的传入值,包括引号:

"This is my string for a new name (comment) [comment 2]"

我需要创建的字符串是:

Timsfann

这些字符来自上述字符串中每个字词的第一个字母,当它到达(comment)中的括号时停止。

上面的字符串将与日期/时间字符串连接以创建唯一的文件名。完成的字符串应设置为系统变量,以便程序可以找到完成的值。

任何帮助都将不胜感激。

我一直在尝试使用FOR循环,但似乎无法按需运行。

3 个答案:

答案 0 :(得分:2)

@Crimsyn,如果您更容易理解,这是另外一种方法,没有使用延迟扩展或FOR语句< / EM>:

@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

答案 1 :(得分:2)

另一个!虽然更简单,更短,但这种方法可能更难理解...... ;)

@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

执行

答案 2 :(得分:1)

只有少数几种方法可以做到这一点。

@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