2016-11-25 30 views
1

我已经达到了一个砖墙的一点点。我知道如何通过记事本在批处理文件中打印单个文本文件,但是当涉及到多个文本文件时,我被卡住了。这里是我到目前为止真的工作不正常,在所有:如何在批处理文件中打印多个文本文件

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 
+0

有一个语法问题:'if“%PrinterFile%”==“”('(注意额外的引号和移动的空间) – aschipfl

+0

由于某些原因,它仍然只是退出并且从不实际输出文本文件到记事本中。 – bodotheguy

+0

是的,因为你的第一行;我只是想指出一个语法错误,但我没有提供解决方案;你在找什么叫做“命令行参数” - 参见['call'](http ://ss64.com/nt/call.html)命令(在命令提示符窗口中键入'call /?'并阅读帮助文件)... – aschipfl

回答

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.txtfilelist。如果没有提供参数,则将分配为filelist

如果filelist被定义(即,包含这意味着被提供的命令行参数的值),然后进入到标签printthem

否则,清除屏幕和如何消息Press ENTER to START printing

然后设置filename什么也没有(因为set /p与简单输入将离开值不变)并提示输入与Print :。键盘输入将被放入filename

如果有一个(假设的,文件名)项,然后在逗号后重复"the filename"filelist的末尾并重复请求一个文件名。

当简单地使用输入filename将是空的,因此不确定的,所以我们继续:printthem提供filelist不是空的。

从这里,我们简单地处理filelist作为一个逗号分隔的一系列文件名 到%%f。如果输入的文件名存在,请使用记事本打印,如果不存在,请尝试追加.txt作为名称,如果即使失败,也会显示错误消息。

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

+0

这是应该自行工作还是应该保持第一行? – bodotheguy

+0

是我发布的。如果你真的想要通过一个即时和接受的周期,那么很容易安排。 – Magoo

+0

如果你有时间,你能解释每一行吗? – bodotheguy

相关问题