我正在编写一个简单的批处理文件,该文件使用用户提交的网址从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%
答案 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
中的代字号会删除引号。如果你想保留报价,请忽略波浪号。
已编辑以实施简单的输入检查