我有一个批处理文件,它可以根据用户输入复制一些文件,我想简化它。如果用户在提示符下键入字母A,它将A.txt从C:\复制到E:\本质上,它是这样的:
set /p letter="Enter a letter of the alphabet"
if /i [%letter%]==[A] GOTO LetterA
if /i [%letter%]==[B] GOTO LetterB
if /i [%letter%]==[C] GOTO LetterC
:LetterA
robocopy C:\ E:\ A.txt
:LetterB
robocopy C:\ E:\ B.txt
:LetterC
robocopy C:\ E:\ C.txt
:end
我是否必须为IF语句和它调用的goto命令都为字母表中的每个字母键入/复制每一行?我可以使用for循环或if语句更轻松地完成此操作,基本上说一下..
For %letter%
robocopy C:\ E:\ %letter%.txt
或类似于IF语句,引用list.txt文件..而list.txt中包含所有字母的字母。。
IF %letter% in (C:\list.txt)
then robocopy C:\ E:\ %letter%.txt
基本上,您正在寻找一种方法来确保输入在预定义的集合内。您可以这样做:
@echo off
setlocal
:loop
set /p "letter=Enter a letter of the alphabet: "
echo %letter%|findstr /ix "a b c d e f g h i j k l m n o p q r s t u v w x y z" || goto :loop
ECHO robocopy C:\ E:\ %letter%.txt
((在测试后删除大写的ECHO
以实际启用robocopy
命令)
一个简单的答案:
@echo off
set /p "letter=Enter a letter of the alphabet: "
for %%x in (a b c d e f g h i j k l m n o p q r s t u w x y z) do if /i "%letter%" equ "%%x" robocopy C:\ E:\ %%x.txt
但是,它不能处理有毒字符,但是比findstr安全得多。