我试图创建一个程序,希望在C:\
中搜索每个目录,子目录,子子目录等。我觉得我可以照顾那一部分,但也存在文件夹名称的问题。当我的程序搜索FOO
或巨型Foo
/ if
或else
语句时,可能会出现类似名为case
的文件夹等案例问题搜索条件。
我的问题是:1。有没有办法忽视字母案例? 2.有没有办法为搜索提供更有效的陈述?
我目前的代码:
#foldersniffer by Touka, ©2015
base = Dir.entries("C:\\")
trees = Dir.entries("#{base}")
trees.each do |tree|
if Dir.exist?("Foo")
puts "Found Folder \"Foo\" in C:\\"
elsif Dir.exist?("Bar")
puts "Found Folder \"Bar\" in C:\\"
else
puts "No folders found"
end
end
sleep
感谢任何帮助。
编辑:它正在尝试扫描像bootmgr这样的文件,并且它给了我错误...我不确定如何修复它。
答案 0 :(得分:0)
我不够专业,但我会调查File :: FNM_CASEFOLD
答案 1 :(得分:0)
考虑使用Dir.glob(...)
和正则表达式进行不区分大小写的匹配:
Dir.glob('c:\\**\*') do |filename|
if filename =~ /c:\\(foo|bar)($|\\)/i
puts "Found #{filename}"
end
end
Dir.glob
参数的区分大小写可能与Windows系统无关:
请注意,此模式不是正则表达式,它更接近于shell glob。有关flags参数的含义,请参见File.fnmatch。请注意,区分大小写取决于您的系统(因此忽略File :: FNM_CASEFOLD),返回结果的顺序也是如此。