问题标签 [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.
windows - 批处理脚本中的内部延迟扩展(Windows)
我需要在延迟扩展中进行延迟扩展,例如:
当然,以上是无效的,所以我尝试用 for-loop 解决它,但没有成功:
我怎样才能实现解释的行为?
batch-file - 为什么 setlocal 会干扰 Windows 批处理文件中的 chdir?
如果我运行批处理文件
目录没有改变,但如果我运行
它工作正常。这必须正是 setlocal 所期望的。但是,当你阅读setlocal的定义时并不完全清楚,这与如何看到环境变量有关。我希望这是一个很好的机会来解释 setlocal 的实际作用以及它为什么会干扰 chdir。
batch-file - 为什么我不能在 if 语句中获得延迟扩展变量的子字符串?
为什么字符串操作在 if 语句中内联工作而不使用延迟扩展变量 - 但否则会失败。例如:
这工作正常;归来Success
。但是,如果我执行以下操作:
我收到错误 -4!==test was unexpected at this time.
显然,您可以通过执行类似set comp=!test:~0,4!
then 的操作来解决此问题,只需!comp!
在 if 语句中使用变量即可。
arrays - 循环通过批处理文件中的“数组”来移动元素
我有一个批处理文件,它以来自 Java 文件的字符串数组的形式传递命令。这些命令包含如下内容:
commands 数组是动态的,因为每次运行 java 程序时它都会发生变化。在批处理文件中,我创建变量来获取前三个元素(在本例中为 A、B 和 C)的值。然后我需要移动目录字符串以占用数组的前三个元素。这是我到目前为止的批处理代码:
我遇到的问题是线路set list[!old!]=!list[%new%]!
。如您所见,我启用了延迟扩展。但是,模拟数组中元素的 list[...] 变量需要 !!。但是,我相信我也需要对“新”使用延迟扩展。在这种情况下我该怎么办?或者也许这不是真正的问题?“旧”和“新”变量正确递增,但该echo !list[%old%]!
行每次都返回相同的值。我希望该行中存在相同的问题,“旧”-它应该有!围绕它但是!已经被用于 list[...] 变量。那么如果你需要在语句中嵌套 !'s 会发生什么?感谢您的帮助!
windows - 检查文件是否存在时将 DelayedExpansion 变量评估为驱动器号
我有这段代码应该检查 USB 驱动器,然后如果他们有一个文件将它们标记为我的实用程序驱动器之一,它会在它们上运行 robocopy 同步以确保它们是最新的。
问题是它没有正确评估文件的路径。如果我echo "!curDrive!\file.txt"
打印\file.txt"
脚本的相关(清理/匿名)位是:
我为调试而投入的回声,我在所有迭代中都得到了预期的输出,例如,
batch-file - 批量读取文件和输出行号+令牌?
这就是我想要做的,一个读取文件(例如 file.txt)并输出 line# + token 的批处理。
这是我试图做的(显然没有用):
file.txt 包含:
我想输出的是:
这段代码实际上在输出中抛出了什么:
有任何想法吗?
variables - 我将如何调用动态变量名称?
好的,所以我正在尝试制作一个“理解”用户输入并按照他们的要求执行的程序。人们通常只使用特定的命令,例如“打开此文件”,并且只有在用户输入完全正确的情况下才有效。我试图给我的用户一点回旋余地,这样他们就可以输入他们想要发生的事情,并且计算机会得到大致的想法。抛开那块漫无边际的东西,我遇到了一个问题。
最后一行是我卡住的地方......我正在尝试使用最后记录的单词变量。
有点像这样?
bash - 如何引用 bash 标志参数以通过一个 getopts 调用并被第二个解释?
脚本nerf
调用脚本herd
,脚本调用脚本er
。 nerf
使用一个标志herd
,明确接受需要传递给的参数er
。
这在以前不是问题nerf
- 当herd
刚刚从命令行调用时,我们可以单引号将参数传递给 -p 标志,它们永远不会被herd
's解释getopts
,而是会被er
's解释getopts
。
但是现在我们已经在最终需要转到的标志中生成了值er
,所以我需要在 中扩展变量,但$file_contents
在它们到达之前nerf
不要让它们被解释。getopts
er
这三个脚本中的任何一个都可以修改。
如果我在上面的标记行上使用单引号,我会得到传递的文字字符串 "$er_args"。使用双引号,标志直接由herd
. 使用单引号内的双引号,任何 getopts 都不会解释标志。
我认为这里没有优雅的解决方案,但如果我错了,请告诉我。我能想到的唯一解决方案是糟糕的:
- 通过 . 显式公开所有
er
的标志herd
。 - 从 中删除
er
呼叫herd
并将其直接放入nerf
. - ???
batch-file - 批处理文件延迟扩展逐行包含感叹号的文件副本
好的,所以我有两个文件,其中包含除一行之外的相同文本,我正在做的是将文件中的不同行复制%source%
到%target%
文件中(本质上只是将整个文件逐行写入新的文件)。我遇到的问题是,有时源文件会有一个用 ! 表示的内联注释。它不会转换为目标文件。我目前正在运行的代码如下:
为方便起见,源文件和目标文件一样是一个简单的文本文件。尝试了其他几个“绕过!” 延迟扩展的问题,但似乎找不到适合这种情况的问题,因为我不知道文件在哪里!会发生。我也尝试将 setlocal/endlocal 移动到 for 循环中,但这似乎也不起作用。
%source%
文件中会导致问题的任何给定行的格式为:
谢谢你的帮助。
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