我有一个网站列表。我想要一个批处理文件,当我第一次执行bat文件时,它将只打开列表中的第一个网站,当我第二次执行批处理文件时,它将只打开列表中的第二个网站,当我执行第三个网站时时间它只打开列表中的第三个网站,依此类推。 有人建议我遵循解决方案:
@echo off & setLocal EnableDELAYedExpansion
if not exist %TEMP%\runnum echo 1> %TEMP%\runnum
set /p R=<%TEMP%\runnum
set N=
for /f "tokens=* delims= " %%a in (myfile) do (
set /a N+=1
if !N! equ !R! echo firefox %%a blabla
)
set /a R+=1
echo !R!> %TEMP%\runnum
但我不知道(myfile)
和blabla
的含义是什么,因为我对脚本或编程一无所知。
有人可以帮我进一步。假设我的网站列表是:
http://meebo.com http://yahoo.com http://google.com http://orkut.com http://facebook.com http://msn.com http://cnn.com http://myspace.com http://twitter.com
答案 0 :(得分:5)
这实际上并不那么难。 myfile
成为存储网址列表的文件名,blabla
只是传递给Firefox的其他参数。
虽然有几点可以改进:
依靠Firefox并不是最好的选择。我建议使用
start "" "%%a"
相反,因为它产生默认浏览器而不是硬编码特定浏览器。
当您的文件中的网站数量达到并且可能只是生成一个新的Firefox窗口时,您的批处理将失败。下面我创建了一个批处理,消除了这两个问题:
@echo off
setlocal enableextensions
rem fetch the first URL
set /p URL=<list.txt
rem Open the browser with that URL
start "" "%URL%"
rem Remove the URL from the front of the file ...
more +1 list.txt | findstr /r /v "^$" > tmp_list.txt
rem ... and put it to the end
echo.%URL%>>tmp_list.txt
del list.txt
ren tmp_list.txt list.txt
endlocal
此版本不依赖于特定的浏览器。它将简单地滚动文件本身,删除第一个URL并再次粘贴到最后。所以只要你有你的URL文件(在这种情况下是list.txt
),它就是自包含的。代码也可以在我的SVN repository中找到。
ETA:解释该批次的某些部分:
set /p URL=<list.txt
这将list.txt
中的第一行存储在环境变量URL
中。通常set /p
会提示用户输入。通过将文件重定向到此命令,我们基本上假装文件的内容是用户输入。
start "" "%URL%"
将打开网页,文档,文件夹等等。 start
自动完成The Right Thing™(主要是:))。如果我们给它一个URL,它将打开它的默认浏览器,这是我们在这里使用的。 URL周围的两个引号将确保URL中&
之类的字符将正确传递给浏览器,否则它们具有特殊含义。遗憾的是,在使用带start
的引号时,start
后面的两个引号是必要的。否则start
会将URL解释为新控制台窗口的窗口标题,这可能不是我们想要的。
more +1 list.txt | findstr /r /v "^$" > tmp_list.txt
这有几个部分。首先more +1
导致输出文件,跳过第一行。我们记得,第一行是我们想要打开的第一个URL(应该已经发生过了)。我们想要做的是从文件的开头删除该URL并将其放到最后。所以第一步是从头开始删除它,这是more +1 list.txt
在这里做的。
然后,无论more
打印件被传递到findstr
。 findstr
是一个通常用于搜索字符串的便利工具。我们在这里做的是启用带有/r
的正则表达式(一种程序员用于处理文本的梦想工具 - 如果可以的话,他们会用正则表达式编写完整的程序,但我离题了)。然后/v
会导致findstr
打印每行而不是,然后匹配我们指定的内容。我们在这里搜索的模式是"^$"
,这只是“空行”的注册。
因此,在一行中,我们从文件中删除第一行,从中删除任何空行。 (那些空行会导致批处理文件做出奇怪的事情。请记住start
主要是正确的吗?这就是一个这样的情况。文件中的空行会导致资源管理器窗口显示当前文件夹,而不是带有下一个网页的浏览器。所以我们需要摆脱它们。)
最后,我们将这些命令的所有内容写入一个名为tmp_list.txt
的新文件中。别担心,它不会徘徊太久。
echo.%URL%>>tmp_list.txt
这会将刚打开的URL追加到我们的临时列表中。没什么好看的。
del list.txt
ren tmp_list.txt list.txt
最后,我们删除旧列表,并将临时名称重命名为旧名称。
ETA :由于您要求一次性打开多个页面的版本,以下是一个快速而肮脏的黑客,它可以实现:
@echo off
setlocal enableextensions
set num=3
for /l %%i in (1,1,%num%) do call :start
endlocal
goto :eof
:start
set /p URL=<list.txt
start "" "%URL%"
more +1 list.txt | findstr /r /v "^$" > tmp_list.txt
echo.%URL%>>tmp_list.txt
del list.txt
ren tmp_list.txt list.txt
goto :eof
这次没有冗长的解释。这篇文章已经足够长了。您可以通过更改文件顶部附近的num
变量来控制打开的页数。
set num=5
将导致打开五页而不是三页。
答案 1 :(得分:2)
扩展了Ventero的“Dirty hack”,让文本文件中的行循环遍历整个文本文件,打开它们然后结束。像魅力一样工作
@echo off
setlocal enableextensions
setlocal EnableDelayedExpansion
set "cmd=findstr /R /N "^^" Give.txt | find /C ":""
for /f %%a in ('!cmd!') do set number=%%a
set num=%number%
for /l %%i in (1,1,%num%) do call :start
endlocal
goto :eof
:start
set /p URL=<Give.txt
start "" "%URL%"
more +1 Give.txt | findstr /r /v "^$" > tmp_list.txt
echo.%URL%>>tmp_list.txt
del Give.txt
ren tmp_list.txt Give.txt
goto :eof
希望其他人制作并发布,所以我会成为其他人=)
答案 2 :(得分:1)
由于
我有一个空格(%20)的网址,确实需要:
start "" "(URL with space)"
另外,我发现如果没有加载IE,它会在加载时忽略我的批处理文件中的硬编码列表,导致列表中只有一个URL实际工作。第一次启动后的延迟效果很好:
rem allow IE to load, otherwise it will only show 1 URL
rem N=Nothing shown D=default (Y for Y/N) T=timeout (7 sec)
@choice /N /D Y /T 7 > nul:
答案 3 :(得分:1)
我刚刚找到了一个不支持/ D和/ T的旧的choice.com:
rem older versions of choice may need: choice /N /Ty,7 > nul:
如果有疑问,请使用 choice /?:)