批处理文件:将用户输入的字符串分解为数组

时间:2015-05-06 05:34:40

标签: arrays windows string batch-file command-line

我正在编写一个简单的批处理文件,该文件使用用户提交的网址从Web服务器复制视频。我想提取部分用户提交的字符串并将它们设置为变量。下面是我的示例代码。

@echo OFF
SET outputdir= %~dp0output\
SET libav= %~dp0libav\win64\usr\bin
CD %libav%
SET /p code= "Paste the download code from your browser: "

用户将输入一个字符串,该字符串的格式为%code%:

avconv -i "http://example.com/i/index_0_av.m3u8" -codec copy -qscale 0 video_name.mp4

我想使用空格作为分隔符。我需要将第3项设置为%url%,将第8项设置为%filename%。基本上我正在尝试做一些explode()在PHP中做的事情。

目标是将以下内容作为文件中的最后一行。

call avconv -i "%url%" -codec copy -qscale 0 %outputdir%%filename%

3 个答案:

答案 0 :(得分:2)

虽然有几种方法可以在Batch中执行您想要的操作,但下面的版本可以模拟PHP的爆炸:

@echo off
setlocal EnableDelayedExpansion

set code=avconv -i "http://example.com/i/index_0_av.m3u8" -codec copy -qscale 0 video_name.mp4

rem Explode "code" string into "item" array
set i=0
for %%a in (%code%) do (
   set /A i+=1
   set "item[!i!]=%%~a"
)

rem Set 3rd item as url and 8th item as filename
set url=%item[3]%
set filename=%item[8]%

echo call avconv -i "%url%" -codec copy -qscale 0 %outputdir%%filename%

答案 1 :(得分:0)

For /f "tokens=3" %A in ("%CODE%") Do Echo %A

相同
For /f "tokens=3" %A in ("avconv -i http://example.com/i/index_0_av.m3u8 -codec copy -qscale 0 video_name.mp4") Do Echo %A

我删除了你的报价。报价只需要空格。网址不能包含空格。

在批处理文件中,在命令提示符下使用%%A ratherthan %A

如果需要引号,请参阅UseBackQ选项,其中单引号括起字符串。

答案 2 :(得分:0)

:loop
SET /p "code=Paste the download code from your browser: "
for /f "tokens=3,8,9 delims= " %%a in ("%code%") do (
  if "%%b"=="" echo too few parameters & goto :loop
  if not "%%c"=="" echo too much parameters & goto :loop
  set "url=%%~a"
  set "filename=%%b"
)
echo %url%, %filename%

注意:%%~a中的代字号会删除引号。如果你想保留报价,请忽略波浪号。

已编辑以实施简单的输入检查