我到了一点砖墙。我知道如何通过记事本在批处理文件中打印单个文本文件,但是当涉及多个文本文件时,我会陷入困境。到目前为止,这是我实际上根本无法正常工作的内容:
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
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
。如果没有提供的参数,则不分配任何给filelist
。
如果filelist
定义了(即,包含一个暗示提供了命令行参数的值),则转到标签printthem
否则,请清除屏幕以及如何显示消息 Press ENTER to START printing
然后设置filename
为none(因为set /p
使用justEnter会使值保持不变),并提示使用进行输入Print :
。键盘输入将放入filename
。
如果输入了一个(假定的文件名)条目,则在逗号后面累积"the filename"
到末尾filelist
并重复请求文件名的操作。
当单纯Enter使用时,filename
将为空,因此未定义,因此我们继续:printthem
提供filelist
不为空。
从那里开始,我们只需filelist
将逗号分隔的文件名序列处理为即可%%f
。如果输入的文件名存在,请使用记事本进行打印,如果不存在,请尝试追加.txt
名称,即使失败,也将显示错误消息。
该%%~f
删除从项目的报价%%f
。然后将其重新报价,以便filenames containing spaces
可以打印。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句