编辑:变量没有正确定义。我不知道为什么,但我找到了解决方法:
只需要6页。我创建了第7页,它将立即返回到第1页。因此不再需要%HTMLNxtpg%变量。
我正在尝试创建一个批处理文件,该文件将吐出一个HTML文件,这样用户就不需要了解HTML来制作他们的网站。
网站需要"直播"所以我让iframe使用
重定向到彼此<body onload="timer=setTimeout(function(){ window.location='file:///C:/Users/MyUser/Dropbox/PageMDB/sources/Page/Page_%HTMLNxtpg%.html';}, %HTMLlen%)" style="background:#408CBD">
(此网址是临时的,因此它现在将在本地运行)
并且在名为的URL中提到了一个变量 %HTMLNxtpg% 但是Echo命令完全忽略了它。它没有输出任何导致浏览器有404的内容。我使用
定义HTMLNxtpg变量延迟扩展在定义变量期间打开,在使用时关闭。
编辑:这段代码非常糟糕,并已通过评论和回答(@Stephan和@Mofi)修复if HTMLPGnr==1 set /a HTMLNxtpg=2
if HTMLPGnr==2 set /a HTMLNxtpg=3
if HTMLPGnr==3 set /a HTMLNxtpg=4
if HTMLPGnr==4 set /a HTMLNxtpg=5
if HTMLPGnr==5 set /a HTMLNxtpg=6
if HTMLPGnr==6 set /a HTMLNxtpg=1
我得到的结果是
file:///C:/Users/MyUser/Dropbox/Netpage/sources/Page/Page_.html
虽然应该
file:///C:/Users/MyUser/Dropbox/Netpage/sources/Page/Page_1.html
,1是变量的结果
应该输出正文标记的Echo行:
Echo ^<body onload="timer=setTimeout(function(){ window.location='file:///C:/Users/MyUser/Dropbox/Netpage/sources/Page/Page_%HTMLNxtpg%.html';}, %HTMLlen%)" style="background:#408CBD"^>>>sources/Page/Page_%HTMLPGnr%.html
提前致谢。
答案 0 :(得分:1)
您尚未向我们展示完整的批处理代码,因此我必须猜测变量HTMLPGnr
未在参考时定义。
延迟扩展在定义变量期间打开,在使用时关闭。
在我的批处理文件中使用了这句话让我想到了类似的内容:
setlocal EnableDelayedExpansion
if HTMLPGnr==1 set /a HTMLNxtpg=2
if HTMLPGnr==2 set /a HTMLNxtpg=3
if HTMLPGnr==3 set /a HTMLNxtpg=4
if HTMLPGnr==4 set /a HTMLNxtpg=5
if HTMLPGnr==5 set /a HTMLNxtpg=6
if HTMLPGnr==6 set /a HTMLNxtpg=1
endlocal
echo ^<body onload="timer=setTimeout(function(){ window.location='file:///C:/Users/MyUser/Dropbox/Netpage/sources/Page/Page_%HTMLNxtpg%.html';}, %HTMLlen%)" style="background:#408CBD"^>>>sources/Page/Page_%HTMLPGnr%.html
带参数 EnableDelayedExpansion 的命令 setlocal 不仅可以启用延迟环境变量扩展,还可以复制当前环境表。
每个 set 命令都会修改新表中的环境变量。之前的环境变量表在未修改的同时保留在内存中。因此,仅在新表上更改已存在的环境变量或添加环境变量的值。
命令 endlocal 恢复以前的延迟扩展模式,这通常意味着将其关闭。此外,还会丢弃当前的环境变量表,并从内存中恢复上一个表。
所有设置操作导致在 setlcoal 和 endlocal 之间添加,删除或修改变量,在命令 endlocal 强>
由于变量HTMLNxtpg
在启用了延迟扩展且无用选项/a
的新表中创建完全无用,因此在命令 endlocal 之后该变量不再存在。< / p>
正如Stephan建议的那样,这9行代码可以用以下两行代替:
set /a HTMLNxtpg=HTMLPGnr %% 6 + 1
echo ^<body onload="timer=setTimeout(function(){ window.location='file:///C:/Users/MyUser/Dropbox/Netpage/sources/Page/Page_%HTMLNxtpg%.html';}, %HTMLlen%)" style="background:#408CBD"^>>>sources/Page/Page_%HTMLPGnr%.html
但是,让我们看一下简单示例中的 setlocal 和 endlocal 行为:
@echo off
set "TEST=Hi!"
echo 1. !TEST!
echo 2. %TEST%
setlocal EnableDelayedExpansion
echo 3. !TEST!
echo 4. %TEST%
set "TEST=Hello^!"
echo 5. !TEST!
echo 6. %TEST%
setlocal DisableDelayedExpansion
echo 7. !TEST!
echo 8. %TEST%
set "TEST=Bonjour!"
echo 9. !TEST!
echo 10. %TEST%
endlocal
echo 11. !TEST!
echo 12. %TEST%
endlocal
echo 13. !TEST!
echo 14. %TEST%
set "TEST="
pause
运行此批处理文件会产生输出:
1. !TEST!
2. Hi!
3. Hi!
4. Hi
5. Hello!
6. Hello
7. !TEST!
8. Hello!
9. !TEST!
10. Bonjour!
11. Hello!
12. Hello
13. !TEST!
14. Hi!
!TEST!
,因为默认情况下未启用延迟环境变量扩展。Hi!
通常在引用延迟扩展时启用变量TEST
的值时输出正确。Hi!
现在输出时带有延迟扩展的变量TEST
的引用值,因为现在启用了延迟扩展并且变量仍然存在,因为之前已经创建了整个表的副本。Hi
没有解释标记是在引用变量TEST
的值时输出的,因为感叹号被命令行解释器解释为延迟变量引用的开头。Hello!
后,TEST
输出正确,延迟扩展
需要通过转义感叹号来完成修改,否则命令行解释器会在将新字符串分配给变量!
时将TEST
再次解释为延迟扩展变量引用的开头。Hello
的新值时输出TEST
没有感叹号。!TEST!
,因为再次禁用延迟环境变量扩展。Hello!
是TEST
的正确输出。!TEST!
,因为虽然TEST
的值再次更改,但仍会禁用延迟环境变量展开。Bonjour!
是TEST
的第三个实例的值的正确输出。Hello!
在 endlocal 之后输出,后者丢弃第三个表并恢复了延迟扩展模式。Hello
表示延迟扩展再次对第二个表有效,因为再次没有输出感叹号。!TEST!
输出是因为在再输出一个 endlocal 之后,第二个表也被丢弃了,我们又回到了初始表,并且再次禁用了延迟扩展。Hi!
是在删除此变量之前通常引用TEST
的第一个实例的值的最终输出。我希望,这个简单的例子有助于理解命令 setlocal 和 endlocal 的功能。