我已经到了一点砖墙。我知道如何通过记事本在批处理文件中打印单个文本文件,但是当涉及到多个文本文件时我会陷入困境。以下是我到目前为止根本没有正常工作的内容:
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 :(得分: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
会打印文件(abc
或abc.txt
)和(def
或def.txt
)和(ghi
或ghi.txt
)和()如果文件存在,则yellow.txt
或yellow.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
。