问题标签 [delayedvariableexpansion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
101 浏览

windows - 批处理脚本中的内部延迟扩展(Windows)

我需要在延迟扩展中进行延迟扩展,例如:

当然,以上是无效的,所以我尝试用 for-loop 解决它,但没有成功:

我怎样才能实现解释的行为?

0 投票
2 回答
1287 浏览

batch-file - 为什么 setlocal 会干扰 Windows 批处理文件中的 chdir?

如果我运行批处理文件

目录没有改变,但如果我运行

它工作正常。这必须正是 setlocal 所期望的。但是,当你阅读setlocal的定义时并不完全清楚,这与如何看到环境变量有关。我希望这是一个很好的机会来解释 setlocal 的实际作用以及它为什么会干扰 chdir。

0 投票
2 回答
4100 浏览

batch-file - 为什么我不能在 if 语句中获得延迟扩展变量的子字符串?

为什么字符串操作在 if 语句中内联工作而不使用延迟扩展变量 - 但否则会失败。例如:

这工作正常;归来Success。但是,如果我执行以下操作:

我收到错误 -4!==test was unexpected at this time.

显然,您可以通过执行类似set comp=!test:~0,4!then 的操作来解决此问题,只需!comp!在 if 语句中使用变量即可。

0 投票
1 回答
3963 浏览

arrays - 循环通过批处理文件中的“数组”来移动元素

我有一个批处理文件,它以来自 Java 文件的字符串数组的形式传递命令。这些命令包含如下内容:

commands 数组是动态的,因为每次运行 java 程序时它都会发生变化。在批处理文件中,我创建变量来获取前三个元素(在本例中为 A、B 和 C)的值。然后我需要移动目录字符串以占用数组的前三个元素。这是我到目前为止的批处理代码:

我遇到的问题是线路set list[!old!]=!list[%new%]!。如您所见,我启用了延迟扩展。但是,模拟数组中元素的 list[...] 变量需要 !!。但是,我相信我也需要对“新”使用延迟扩展。在这种情况下我该怎么办?或者也许这不是真正的问题?“旧”和“新”变量正确递增,但该echo !list[%old%]!行每次都返回相同的值。我希望该行中存在相同的问题,“旧”-它应该有!围绕它但是!已经被用于 list[...] 变量。那么如果你需要在语句中嵌套 !'s 会发生什么?感谢您的帮助!

0 投票
2 回答
109 浏览

windows - 检查文件是否存在时将 DelayedExpansion 变量评估为驱动器号

我有这段代码应该检查 USB 驱动器,然后如果他们有一个文件将它们标记为我的实用程序驱动器之一,它会在它们上运行 robocopy 同步以确保它们是最新的。

问题是它没有正确评估文件的路径。如果我echo "!curDrive!\file.txt"打印\file.txt"

脚本的相关(清理/匿名)位是:

我为调试而投入的回声,我在所有迭代中都得到了预期的输出,例如,

0 投票
1 回答
55 浏览

batch-file - 批量读取文件和输出行号+令牌?

这就是我想要做的,一个读取文件(例如 file.txt)并输出 line# + token 的批处理。

这是我试图做的(显然没有用):

file.txt 包含:

我想输出的是:

这段代码实际上在输出中抛出了什么:

有任何想法吗?

0 投票
1 回答
567 浏览

variables - 我将如何调用动态变量名称?

好的,所以我正在尝试制作一个“理解”用户输入并按照他们的要求执行的程序。人们通常只使用特定的命令,例如“打开此文件”,并且只有在用户输入完全正确的情况下才有效。我试图给我的用户一点回旋余地,这样他们就可以输入他们想要发生的事情,并且计算机会得到大致的想法。抛开那块漫无边际的东西,我遇到了一个问题。

最后一行是我卡住的地方......我正在尝试使用最后记录的单词变量。

有点像这样?

0 投票
1 回答
1680 浏览

bash - 如何引用 bash 标志参数以通过一个 getopts 调用并被第二个解释?

脚本nerf调用脚本herd,脚本调用脚本ernerf使用一个标志herd,明确接受需要传递给的参数er

这在以前不是问题nerf- 当herd刚刚从命令行调用时,我们可以单引号将参数传递给 -p 标志,它们永远不会被herd's解释getopts,而是会被er's解释getopts

但是现在我们已经在最终需要转到的标志中生成了值er,所以我需要在 中扩展变量,但$file_contents在它们到达之前nerf不要让它们被解释。getoptser

这三个脚本中的任何一个都可以修改。

如果我在上面的标记行上使用单引号,我会得到传递的文字字符串 "$er_args"。使用双引号,标志直接由herd. 使用单引号内的双引号,任何 getopts 都不会解释标志。

我认为这里没有优雅的解决方案,但如果我错了,请告诉我。我能想到的唯一解决方案是糟糕的:

  1. 通过 . 显式公开所有er的标志herd
  2. 从 中删除er呼叫herd并将其直接放入nerf.
  3. ???
0 投票
1 回答
226 浏览

batch-file - 批处理文件延迟扩展逐行包含感叹号的文件副本

好的,所以我有两个文件,其中包含除一行之外的相同文本,我正在做的是将文件中的不同行复制%source%%target%文件中(本质上只是将整个文件逐行写入新的文件)。我遇到的问题是,有时源文件会有一个用 ! 表示的内联注释。它不会转换为目标文件。我目前正在运行的代码如下:

为方便起见,源文件和目标文件一样是一个简单的文本文件。尝试了其他几个“绕过!” 延迟扩展的问题,但似乎找不到适合这种情况的问题,因为我不知道文件在哪里!会发生。我也尝试将 setlocal/endlocal 移动到 for 循环中,但这似乎也不起作用。

%source%文件中会导致问题的任何给定行的格式为:

谢谢你的帮助。

0 投票
2 回答
2052 浏览

batch-file - Passing exclamation marks as parameters in batch subroutine call

Thanks to this community I have finally learned how to escape exlamation marks for immediate use in a batch delayedExpansion block. (use two escape carets not just one, awesome)

But I can't seem to find or figure out how to pass the contents of a variable containing an exclamation mark as parameter to a batch subroutine.

example:

Output:

I want the second "Hello" to include an exclamation mark. I have tried various permutations of substring replacement on line 5 to no avail.

help