我想做的是:使用dir命令查找一堆文本文件,然后在Notepad++中全部打开。最好是在单个命令中,而不创建额外的文件。一般来说你可以直接说
notepad++ zed.txt ./ted/zed.txt ./red/zed.txt
但是我需要在一个复杂的目录结构中打开许多文件。
我觉得我应该可以做这样的事情:
dir /s/a/b "zed.txt" | notepad++
这确实给予了我想要的输出(递归地找到文件并只吐出文件名),但每个文件都在自己的行上,Notepad不会打开它们,它只是打开并要求创建文件“notepad”-这是空的。
即使使用额外的文件(不可取,但不是首选)也不起作用:
c:\Users\tonip\Desktop\some_dir>dir /s/a/b "cmakelists.txt" > np.txt && notepad < np.txt
或
dir /s/a/b "cmakelists.txt" > np.txt
notepad++ < np.txt
注意:Notepad++目录在我的路径上。
显然,我的转向能力不好。非常感谢您的帮助。
5条答案
按热度按时间j2cgzkjk1#
这在命令行中对我有效:
在执行这一行之前,请确保
list
变量不存在。cclgggtu2#
这似乎对我有用。当然,您需要修改您的'dir /B'条件,以匹配您试图匹配的任何文件。
这个命令循环通过dir输出的所有文件(在我的例子中只有csv文件),并用notepad++打开它们。确保在dir命令后包含/b,以便只输出文件名,而不输出所有其他信息。
n1bvdmb63#
将带有路径(不带双引号)的文件名从命令DIR重定向到 Notepad++ 不起作用,因为 Notepad++ 是一个GUI应用程序,它不会从标准输入流STDIN逐行读取文件名。
我的第一个建议是:
此批处理代码将找到的文件连接到一个长参数列表,该列表始终以空格开始,并以该列表开始 Notepad++。
这段简单代码的问题是,如果有很多文件名为
zed.txt
的文件,参数列表的长度可能会超过环境变量字符串的最大长度。一个简单的解决方案是将每次运行 Notepad++ 的文件数量限制为25。
最好的解决方案是在每次循环运行时,在追加下一个文件名之前检查环境变量的当前长度。但这会使批处理文件变慢,通常带有路径的文件名不会太长,以至于每次执行 Notepad++ 25个文件确实是个问题。
好吧,从理论上讲,一个带有路径的文件名对于分配给环境变量来说可能已经太长了。
注意:如果启动 Notepad++ 后,批处理文件执行停止,并且不希望出现这种情况,请向每个
Notepad++.exe
的左侧插入字符串start ""
,以便在单独的进程中使用空标题字符串启动 Notepad++。不要在Notepad++.exe
之前的命令START之后省略""
,否则第一个双引号字符串(=第一个文件名和路径)将被解释为标题字符串。要了解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
dir /?
echo /?
endlocal /?
for /?
if /?
set /?
setlocal /?
start /?
另请参阅有关Using command redirection operators的Microsoft文档页面,了解
2>nul
的解释。重定向运算符>
在这里使用^
进行转义,以便在执行命令DIR时将STDERR重定向到设备NUL。此重定向用于在当前目录或任何子目录中找不到zed.txt
时抑制命令DIR输出的错误消息。7eumitmz4#
您也可以在Ubuntu(wsl)上这样做
简写为:
对此的变化是排除某些子文件夹。这个脚本将排除任何临时文件夹,如.git
或在打开文件之前扫描文本:
zvms9eto5#
下面是一个在notepad++中打开文件的例子,文件共享匹配一个模式。将此代码放入“finder.bat”文件并双击它。
从https://stackoverflow.com/a/5564349/194872制定的想法