首页 > 解决方案 > 需要帮助简化批处理文件

问题描述

我有一个批处理文件,它根据用户输入复制一些文件,我想简化它。如果用户在提示符中键入字母 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-filecmdcommand-prompt

解决方案


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

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


推荐阅读