需要帮助简化批处理文件

问题描述 投票:0回答:2

我有一个批处理文件,它可以根据用户输入复制一些文件,我想简化它。如果用户在提示符下键入字母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
batch-file cmd command-prompt
2个回答
1
投票

基本上,您正在寻找一种方法来确保输入在预定义的集合内。您可以这样做:

@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命令)


0
投票

一个简单的答案:

@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安全得多。

© www.soinside.com 2019 - 2024. All rights reserved.