Batch file 如何在批处理文件中打印多个文本文件

Batch file 如何在批处理文件中打印多个文本文件,batch-file,Batch File,我碰到了一堵小砖墙。我知道如何通过记事本在批处理文件中打印单个文本文件,但当涉及到多个文本文件时,我就卡住了。以下是迄今为止我所掌握的根本无法正常工作的信息: set /P PrinterFile= "Enter File Name:" | set PrinterFile2= "" | set PrinterFile3= "" | set PrinterFile4= "" | set PrinterFile5= "" if %PrinterFile%== ""( echo please

我碰到了一堵小砖墙。我知道如何通过记事本在批处理文件中打印单个文本文件,但当涉及到多个文本文件时,我就卡住了。以下是迄今为止我所掌握的根本无法正常工作的信息:

set /P PrinterFile= "Enter File Name:" | set PrinterFile2= "" | set PrinterFile3= "" | set PrinterFile4= "" | set PrinterFile5= ""

if %PrinterFile%== ""(
    echo please enter valid file
    pause
) else (
    notepad.exe /P %PrinterFile%
)

pause
我没有完成
if
语句来检查其他语句,因为我无法让第一个语句工作。有人能给我指出正确的方向吗?谢谢大家!

最后,它需要能够获取0到5个文本文件。例如(批处理文件的名称是
printer.bat
):

printfiles.bat

@echo off
setlocal
for %%f in (%*) do (
 if exist "%%~f" (notepad.exe /P "%%~f"
 ) else (
  if exist "%%~f.txt" (notepad.exe /P "%%~f.txt"
  ) else (
   echo "%%~f" not found
  )
 )
)
[未经测试]

这应该行得通。它只处理作为参数提供的名称列表,因此

printfiles abc,def,ghi,yellow.txt
如果文件存在,将打印文件(
abc
abc.txt
)和(
def
def.txt
)和(
ghi
ghi.txt
)和(
yellow.txt

这能解决你的问题吗


完整版本

@ECHO关闭
SETLOCAL
::从命令行获取文件列表
设置“文件列表=%*”
如果定义了文件列表,则转到打印它们
CLS
按回车键开始打印
:下一个文件
设置“文件名=”
设置/p“文件名=打印:”
如果定义的文件名设置为“filelist=%filelist%,“%filename%”,则转到下一个文件(&G)
如果未定义文件列表,则不回显指定的文件(&GOTO:EOF)
:打印它们
对于(%filelist%)中的%%f,请执行以下操作(
如果存在“%%~f”(notepad.exe/P“%%~f”
)否则(
如果存在“%%~f.txt”(notepad.exe/P“%%~f.txt”
)否则(
未找到回显“%%~f”
)
)
)
后藤:EOF
第一件事:从命令行加载
filelist
,因此执行
printfiles abc,def,ghi,yellow.txt将
abc,def,ghi,yellow.txt
分配给
filelist
。如果没有提供参数,则不向
文件列表
分配任何内容

如果定义了
文件列表
(即,包含一个表示提供了命令行参数的值),则转到标签
打印它们

否则,清除屏幕并按ENTER键开始打印消息

然后将
filename
设置为nothing(因为使用简单的Enter键
set/p
将保持值不变),并使用
Print:
提示输入。键盘输入将被放入
文件名

如果有(假定为文件名)条目,则将
文件名“
累积到
文件列表
的末尾,并在逗号后重复请求文件名

当使用简单输入时,
文件名
将为空,因此未定义,因此我们继续执行
:如果
文件列表
不为空,则打印它们

从那里,我们只需将
文件列表
作为逗号分隔的一系列 文件名转换为
%%f
。如果输入的文件名存在,请使用记事本打印,如果不存在,请尝试在名称后面附加
.txt
,即使失败,也会显示错误消息


%%f
%%f
中的项目中删除引号。然后将其重新引用,以便打印包含空格的
文件名。

存在语法问题:
如果“%PrinterFile%”==”(
(注意附加的引号和移动的空格)由于某些原因,它仍然只是退出,并且从来没有将文本文件实际输出到记事本中。是的,因为您的第一行;我只是想指出一个语法错误,但没有提供解决方案;您正在寻找的是“命令行参数”——请参阅命令(在命令提示窗口中键入
call/?
并阅读帮助)…是的,我是这么想的。我正在尝试允许用户输入多个文本文件(最多5个)在命令提示符内的一行上,然后尝试在记事本内打印这些文件。这是应该单独工作还是我应该保留我的第一行?您所需要的只是我发布的内容。如果您确实希望完成提示和接受循环,那么很容易安排。如果您有时间,可以解释每一行吗?
printfiles abc,def,ghi,yellow.txt