【问题标题】:How to split a string in a Windows batch files?如何在 Windows 批处理文件中拆分字符串?
【发布时间】:2013-03-12 02:28:40
【问题描述】:

我正在尝试在 Windows 批处理文件中拆分并创建一个新字符串,但我不知道该怎么做。

我正在尝试转换:

Crysis3_2560x1440

到这里:

Crysis 3 - 2560x1440

然后:

HD7970CrossFire

到这里:

HD 7970 CrossFire

有什么建议吗?

【问题讨论】:

  • 不确定批处理文件,但您可以使用 Powershell 吗?
  • 老实说,我还没有尝试过任何东西;我整天都在用 perl 和 AutoIt 编写代码,但我无法完全理解它。不确定 Powershell 或它如何集成......?肯:我看到了,但我无法将它应用到我的目标中......尝试!
  • 你想用同一个批处理程序分割上面的both字符串吗?你能用文字而不是例子来解释分割的方法吗?例如:“在第一组数字处分隔字符串……”
  • Aacini,当然!对于第一个拆分,我们将有一个带有游戏名称和分辨率的字符串,用下划线分隔。在 _ 处拆分游戏名称和分辨率非常简单,我们还希望能够通过大写字母或数字分隔游戏名称。所以... Crysis3 = Crysis 3 FarCry3 = Far Cry 3 SleepingDogs = Sleeping Dogs 对于第二个拆分,它基本上是第一个拆分的副本,需要确保您正确地击中 intercaps。 HD7970Crossfire = HD 7970 Crossfire GTX680 = GTX 680 GTX680SLI = GTX 680 SLI HD7970 = HD 7970

标签: windows string batch-file split


【解决方案1】:

编辑:这是管理 cmets 中提到的特殊情况的新版本:

@echo off
setlocal EnableDelayedExpansion

for /F %%a in (inputFile.txt) do (
   set string=%%a
   echo Original: !string!
   call :Splint string
   echo Modified: !string!
)
goto :EOF

:Splint string
set string=!%1!
rem Change underscore by space-dash-space
set string=%string:_= - %
rem Separate the string at first group of digits or space
for /F "tokens=1* delims=0123456789 " %%a in ("%string%") do (
   set first=%%a
   set last=%%b
)
rem Eliminate first part from middle
set middle=!string:%first%=!
rem Eliminate last part from middle, if exists
if defined last set middle=!middle:%last%=!
rem Eliminate spaces from middle
set middle=%middle: =%
rem Assemble the result
if defined middle (
   set %1=%first% %middle% %last%
) else (
   set %1=%first% %last%
)
exit /B

输出:

Original: Crysis3_2560x1440
Modified: Crysis 3 - 2560x1440
Original: HD7970CrossFire
Modified: HD 7970 CrossFire
Original: Skyrim_2560x1440
Modified: Skyrim - 2560x1440
Original: SleepingDogs_2560x1440
Modified: SleepingDogs - 2560x1440
Original: GTX680
Modified: GTX 680

安东尼奥

【讨论】:

  • 哇,这太棒了!我刚刚尝试过,它在大多数情况下运行良好,但我发现了几个问题。 1.“Skyrim_2560x1440”和“SleepingDogs_2560x1440”导致“Skyrim-2560 x1440”2.同样,如果像“GTX680”这样的第二个字符串没有第三部分,我得到:“修改:GTX中间:=”谢谢开始吧!!!
  • @RyanShrout:检查新版本!
  • @Aacini 看起来更好!我确实注意到“睡狗”的修改版并没有分成“睡狗”。此外,还有一个想法是让 GPU 名称(gtx、hd)更容易。您可以搜索“GTX”或“HD”并在那里分开吗?这将允许“GTXTitan”修改为“GTX Titan”或“GTXTitanSLI”修改为“GTX Titan SLI”。此外,另一个用例是(也是最长的)“GTX660TiSLI”到“GTX 660 Ti SLI”。这个地方需要一个小费罐!!
【解决方案2】:

您可以使用这些 sn-ps 作为基础...

set in=Crysis3_2560x1440
set out=!in:_= - !
set in
set out

还有……

set in=HD7970CrossFire
set out=!in:HD7970CrossFire=HD 7970 CrossFire!
set in
set out

虽然我只是不明白你为什么不去

set str=HD 7970 CrossFire

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-14
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多