【问题标题】:Could someone help to understand this batch script?有人可以帮助理解这个批处理脚本吗?
【发布时间】:2013-01-28 10:03:43
【问题描述】:
我在读一个批处理文件,但是看不懂,谁能帮忙解释一下?
据我了解 %0 是批处理文件的名称,我们可以对其进行迭代吗?还是表示文件夹的便捷方式?
我在文件中找不到变量 %BatchPath%,你认为它是在哪里定义的?
并且似乎 APATH 是在两个循环中定义的?
for %%x in (%0) do set APATH=%%~dpsx
for %%x in (%BatchPath%) do set APATH=%%~dpsx
pushd %APATH%
【问题讨论】:
标签:
batch-file
batch-processing
【解决方案1】:
您可以迭代单个值。这只是意味着set 语句被执行一次。 ~dps 然后去掉文件名,只保留目录。
第一行对 %0 执行此操作,实际上是当前脚本的路径和名称。
第二行对给定变量执行相同的操作,现在这是有趣的部分,因为如果%BatchPath% 为空,则不会迭代任何内容,因此该行上的set 语句根本不会执行。
如此有效,它存储了一个目录,默认情况下该目录是脚本的目录,但可以通过在调用此脚本之前显式分配%BatchPath% 的路径来覆盖。
pushd 允许您保存目录,以便稍后使用popd 返回该目录。它允许脚本跳转到另一个目录,并且能够在它终止之前将 shell 恢复到原始目录。
【解决方案2】:
%0 是当前的批处理文件。
%%~dpsx 给出当前批处理文件的
此处的短路径给出了驱动器名称,例如“D:\”
Pushd 存储当前目录的名称以供 popd 命令在将当前目录更改为指定之前使用
目录。
APATH 是一些用于存储路径的变量。
所以基本上,脚本会获取有关脚本文件名、驱动器位置的详细信息并将其存储为用作最后一个批处理文件运行的位置或类似的位置。