如何在Windows批处理文件中拆分字符串?

问题描述:

我想分裂并在Windows批处理文件中创建一个新的字符串,但我无法弄清楚如何做到这一点。如何在Windows批处理文件中拆分字符串?

我试图将此转换:

Crysis3_2560x1440 

要这样:

Crysis 3 - 2560x1440 

然后:

HD7970CrossFire 

要这样:

HD 7970 CrossFire 

有什么建议吗?

+0

不确定批处理文件,但你可以使用PowerShell? – 2013-03-12 02:32:00

+0

可能重复[如何在Windows批处理文件中拆分字符串?](http://*.com/questions/1707058/how-to-split-a-string-in-a-windows-batch-file) – 2013-03-12 02:32:10

+0

我老实说还没有尝试过任何东西;我一整天都在perl和AutoIt中编写代码,并且无法完全围绕它。 不确定关于Powershell或它将如何整合...?肯:我看到了,但我不能使它适用于我的目标......试用! – 2013-03-12 02:38:14

编辑:这是管理的意见中提到的特殊情况下,新版本:

@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=" %%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 

安东尼

+0

快速的解决方案? – 2013-03-12 05:22:37

+0

哇,这太棒了!我只是试了一下,大部分情况下我都发现了一些问题。 1.“Skyrim_2560x1440”和“SleepingDogs_2560x1440”导致“Skyrim- 2560 x1440” 2.同样,如果第二个字符串像“GTX680”没有第三部分,我得到:“修改:GTX中: =“ 非常感谢您的出发! – 2013-03-12 05:28:36

+0

@RyanShrout:检查新版本! – Aacini 2013-03-12 17:14:40

你可以使用这些片段作为基地...

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