如何基于条件语句存在变量子串

时间:2017-02-22 00:17:06

标签: windows batch-file command-line user-input substring

我正在编写一个简单的批处理文件来创建新的用户定义文件。 我的问题是如何接受带有或不带句点的扩展的输入,而不是产生一个双周期(即name1..txt)。 我还想避免打印包含/不包含它的说明。谢谢你的帮助!

我的方法如下。我想在"扩展"的开头寻找一段时间。变量,ext,并运行适当的FOR循环来创建文件。

setlocal enabledelayedexpansion
set num=
set name=
set ext=

:setnum
set /P "num=Number of files to create?: "
If not defined num Echo.&Echo You must enter a number to continue...&goto:setnum

:setname
set /P "name=Enter "root" name of file:"
If not defined name echo.&Echo You must enter the name of your new files to continue...&goto:setname

:setext
set /P "ext=What will be the file extension?:"
If not defined ext echo.&Echo You must enter an extension to continue...&goto:setext

pause
%ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot
%ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot

:extNoDot
for /L %%a in (1,1,%num%) do (echo %%a >> !name!%%a%ext%)
goto:eof

:extYesdot
for /L %%a in (1,1,%num%) do (echo %%a >> !name!%%a.%ext%)
goto:eof

:eof
EXIT /b

1 个答案:

答案 0 :(得分:1)

您实际上并未说明当前代码的错误。没有测试,我可以看到这两行必须给你带来问题:

%ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot
%ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot

这是因为你在行的开头有%ext:~0,1%,好像它是一个命令。您似乎要尝试将这些内容传递给FINDSTR命令。因此,你需要回应它们:

echo %ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot
echo %ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot

然而,在这里使用外部命令是过度的。您应该执行以下操作:

rem Remove any optional dot at the start
if "%ext:~0,1%" == "." set "ext=%ext:~1%"

然后继续执行,好像ext首先没有点(不需要单独的nodotyesdot标签)。