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
到什么也没有(因为set /p
与简单输入将离开值不变)并提示输入与Print :
。键盘输入将被放入filename
。
如果有一个(假设的,文件名)项,然后在逗号后重复"the filename"
到filelist
的末尾并重复请求一个文件名。
当简单地使用输入,filename
将是空的,因此不确定的,所以我们继续:printthem
提供filelist
不是空的。
从这里,我们简单地处理filelist
作为一个逗号分隔的一系列文件名 到%%f
。如果输入的文件名存在,请使用记事本打印,如果不存在,请尝试追加.txt
作为名称,如果即使失败,也会显示错误消息。
%%~f
删除%%f
中的项目引号。然后重新引用,以便可以打印filenames containing spaces
。
有一个语法问题:'if“%PrinterFile%”==“”('(注意额外的引号和移动的空间) – aschipfl
由于某些原因,它仍然只是退出并且从不实际输出文本文件到记事本中。 – bodotheguy
是的,因为你的第一行;我只是想指出一个语法错误,但我没有提供解决方案;你在找什么叫做“命令行参数” - 参见['call'](http ://ss64.com/nt/call.html)命令(在命令提示符窗口中键入'call /?'并阅读帮助文件)... – aschipfl