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

时间:2016-11-25 14:36:08

标签: batch-file

我已经到了一点砖墙。我知道如何通过记事本在批处理文件中打印单个文本文件,但是当涉及到多个文本文件时我会陷入困境。以下是我到目前为止根本没有正常工作的内容:

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):

printer   file1.txt file2.txt file3.txt

1 个答案:

答案 0 :(得分:1)

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

会打印文件(abcabc.txt)和(defdef.txt)和(ghighi.txt)和()如果文件存在,则yellow.txtyellow.txt.txt

这能解决您的问题吗?

完整版

@ECHO OFF
SETLOCAL
:: Get file list from command line
SET "filelist=%*"
IF DEFINED filelist GOTO printthem
CLS
ECHO Press ENTER to START printing
:nextfile
SET "filename="
SET /p "filename=Print : "
IF DEFINED filename SET "filelist=%filelist%,"%filename%""&goto nextfile
IF NOT DEFINED filelist ECHO no files specified&GOTO :EOF

:printthem
for %%f in (%filelist%) do (
 if exist "%%~f" (notepad.exe /P "%%~f"
 ) else (
  if exist "%%~f.txt" (notepad.exe /P "%%~f.txt"
  ) else (
   echo "%%~f" not found
  )
 )
)

GOTO :EOF

首先:从命令行加载filelist,因此执行printfiles abc,def,ghi,yellow.txt会将abc,def,ghi,yellow.txt分配给filelist。如果没有提供参数,请将 nothing 分配给filelist

如果定义了filelist(即包含一个暗示提供命令行参数的值),那么转到标签printthem

否则,请清除屏幕以及消息Press ENTER to START printing

的方式

然后将filename设置为 nothing (因为只需 Enter set /p将保留值不变)并且提示输入Print :。键盘输入将放入filename

如果有(假定的,文件名)条目,则在逗号后将"the filename"累加到filelist的末尾,并重复对文件名的请求。

当使用 Enter 时,filename将为空,因此未定义,因此我们继续:printthem,前提是filelist不为空。

从那里开始,我们只需将filelist作为逗号分隔的系列进行处理 文件名为%%f。如果输入的文件名存在,请使用记事本进行打印,如果没有,请尝试将.txt附加到名称,即使失败,也会显示错误消息。

%%~f删除了%%f中项目的引号。然后重新引用,以便打印filenames containing spaces