【发布时间】:2012-04-28 14:26:58
【问题描述】:
不确定编写 bat 脚本以获取名称输入并搜索目录以查看其是否存在的最佳(或更好)方法是什么。
在运行比较之前,我需要先将目录列表输出到文件吗?
如果它有所作为,该目录位于存储库中,因此出于我的目的,我将使用“svn list”,但我认为适合每个人的一个很好的通用解决方案会很好。
【问题讨论】:
标签: search batch-file directory exists
不确定编写 bat 脚本以获取名称输入并搜索目录以查看其是否存在的最佳(或更好)方法是什么。
在运行比较之前,我需要先将目录列表输出到文件吗?
如果它有所作为,该目录位于存储库中,因此出于我的目的,我将使用“svn list”,但我认为适合每个人的一个很好的通用解决方案会很好。
【问题讨论】:
标签: search batch-file directory exists
如果您正在测试目录中的特定名称,那么您通常会执行以下操作:
if exist name (echo found it) else (echo not found)
或者如果名称不完整
if exist *name* (echo found it) else (echo not found)
如果您在目录树中的任何位置测试名称,那么我会使用
dir /s /a-d *name* >nul && (echo found it) || (echo not found)
如果您正在发出一个生成输出行的命令,并且您想测试一个名称是否存在于任何一行中,那么 Windows 管道通常可以正常工作,只要输出的大小不是很大并且第二半可以跟上上半场。
yourCommand | find "name" >nul && (echo found it) || (echo not found)
但是如果第二部分比第一部分慢,管道就会变得低效,并且必须缓冲大量数据。在这种情况下,使用临时文件而不是管道肯定会更好。我在临时文件名中加入了一个随机数,以防止使用同一临时目录的多个进程可能发生冲突。
set tempFile="%temp%\myTempFileBaseName%random%.txt"
yourCommand >%tempFile%
<%tempFile% find "name" >nul && (echo found it) || (echo not found)
del %tempFile%
我通常使用管道,除非我知道自己有性能问题。
【讨论】:
dir /on /b /a:d C:\projects | find test >nul && (echo found it) else (echo not found)