Pat*_*k Q 0 html image batch-file windows-7
我正在尝试创建一个简单的.bat文件,该文件将生成一个.html文件,其中包含指向当前目录中所有图像的图像链接.
用法:C:>画廊
输出:gallery.html
文件内容:
<HTML><HEAD></HEAD><BODY>
<IMG SRC="C:/path/path/path/image1.gif">
<IMG SRC="C:/path/path/path/randomepic.gif">
<IMG SRC="C:/path/path/path/asdfsadfasd.gif">
</BODY></HTML>
Run Code Online (Sandbox Code Playgroud)
请注意,图像文件将具有不可预测的名称,但始终为.gif.
我得到了什么:(在gallery.bat)
@echo off
set file_start=<HTML><HEAD></HEAD><BODY>
set image_start=<IMG SRC="
set image_dir=`cd`
set image_end=">
set file_end=</BODY></HTML>
set file_name=gallery.html
echo %file_start% > %file_name%
for %%image in (*.gif) do @echo %image_start%%image_dir%%%image%image_end% >> $file_name%
echo %file_end% >> %file_name%
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我无法获得小于号的符号,因为批处理文件认为它是输入重定向.如果我用<符号引用行,则引号出现在echo语句中.
另外,我无法将cd命令输出保存到变量%image_dir%
最后,for循环中的echo语句没有正确打印出来.这可能是以前问题的症状.
我希望它只是我遇到的一些小问题.有谁知道如何解决这一问题?谢谢你的时间!
帕特里克Q.
FOR变量必须是单个字符.你不能使用像%%image.
你有两次问题<和>两次.一旦定义变量,再次回显扩展变量时.必须引用或转义这些字符^.
您可以在分配期间使用引号,而不在变量中包含引号 - set "var=value".image_end由于嵌入式引用,分配有点棘手.
您可以通过转义原始分配中的问题字符来避免ECHO的问题.
您无法使用CD获取当前目录.正确的语法是%CD%.但是你不需要你的image_dir变量.您可以使用~f修饰符来获取文件名的完整路径.键入help for从命令提示有关为可变改性剂的详细信息.
将所有产生输出的命令括在括号中并重定向到输出文件只需一次就更有效.
@echo off
setlocal
set "file_start=^<HTML^>^<HEAD^>^</HEAD^>^<BODY^>"
set "image_start=^<IMG SRC=""
set ^"image_end="^>"
set "file_end=^</BODY^>^</HTML^>"
set "file_name=gallery.html"
>"%file_name%" (
echo %file_start%
for %%I in (*.gif) do echo %image_start%%%~fI%image_end%
echo %file_end%
)
Run Code Online (Sandbox Code Playgroud)
在ECHOing不带引号的字符时避免问题的另一种方法是使用延迟扩展.但是!在文件名中有效,如果FOR变量包含该!字符,则延迟扩展将破坏FOR变量的扩展.因此,必须在循环内打开和关闭延迟扩展.
@echo off
setlocal enableDelayedExpansion
set "file_start=<HTML><HEAD></HEAD><BODY>"
set "image_start=<IMG SRC=""
set ^"image_end=">"
set "file_end=</BODY></HTML>"
set "file_name=gallery.html"
>"%file_name%" (
echo !file_start!
setlocal disableDelayedExpansion
for %%I in (*.gif) do (
set "image=%%~fI"
setlocal enableDelayedExpansion
echo !image_start!!image!!image_end!
endlocal
)
endlocal
echo !file_end!
)
Run Code Online (Sandbox Code Playgroud)