问题标签 [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 回答
98 浏览

windows - usebackq 没有延迟扩展

以下从远程目录创建一个编号的链接列表,例如

.

第一个问题:所有链接都包含一个!字符,该字符被延迟扩展删除,使链接无用。链接需要 ,!因为它是链接的一部分。

第二个问题:我正在尝试将其集成到程序中,但我无法使用findstr,因为它会在同一行列出链接和文件名,并且当文件名包含括号时程序崩溃。所以我必须使用 usebackq 因为它让我只获得链接,而不需要处理文件名。

Findstr将列出Link!1 Filename (整行)

Usebackq让我得到Link!1

我不能使用Findstr,因为当文件名包含括号时程序会崩溃,这只能通过延迟扩展来解决。

这是来自这里的后续帖子,我被卡住了:(显示程序
https://stackoverflow.com/questions/49564553/create-a-numbered-list-based-on-a-given-list -of-strings# =

您可以在那里看到 findstr 方法,以及当文件名包含括号时它如何导致崩溃,这可以通过延迟扩展来修复,但这会删除!必不可少的字符,因为它是链接的一部分。

编辑:现在似乎可以工作了,谢谢

工作代码

https://megatools.megous.com/man/megals.html#_megatools

0 投票
2 回答
693 浏览

batch-file - 在 IF 语句中对数组使用 DelayedExpansion 索引变量失败

我有一个批处理文件,我在其中显示目录中的所有 *.pem 文件,让用户可以选择一个,此时只是试图通过使用他们选择的数字来向用户显示他们选择的文件 ECHO数组的内容。我相信不知何故,因为它在 IF 语句内部,索引变量“selectedPem”没有在数组的索引括号中扩展,因为它使用 % 而不是使用延迟扩展!,这似乎在数组的索引中不起作用括号。我认为这是因为如果我在 IF 语句之前设置“selectedPem”变量,它会正确 ECHO。我认为这个工作的唯一选择是以某种方式使用子程序。为什么 selectedPem 变量在 IF 语句中不起作用?

输出:

我理解“ECHO 已关闭”。而是输出,因为它将我的数组变量引用解释为空。感谢您花时间阅读我的脚本,我可能过于复杂了。

0 投票
1 回答
585 浏览

batch-file - 如何避免延迟扩展删除文件名中的感叹号?

如何避免延迟扩展删除文件名中的感叹号?

0 投票
1 回答
59 浏览

batch-file - 使用带有可变跳过字符的可变子字符串

我有这段代码,我希望它读取的字符串thisisaname:21841569874215468432是冒号之前的部分是可变的。它根据用户输入更改长度。所以我找到了一个获取字符串长度的函数和一个获取冒号前字符数的函数。我计划的下一步是跳过thisisaname:该序列中的第一个数字并记录它。应该执行此操作的代码位是,SET PH1=!PH:~%len%,1!它跳过名称的长度和冒号来记录第一个变量。这就是我的问题出现的地方。它总是获取字符串的第一个字母,而不是冒号后面的数字。当我进行子字符串搜索时,似乎没有正确读取跟踪字符长度的变量。我还想将长度用于其他子字符串搜索,这就是您看到len后面的 for 循环中的变量也是如此。这是我所指的代码:

我知道这对于我为什么这样做似乎有点令人困惑,所以我很乐意澄清任何事情!任何事情都有帮助,也有任何建议!谢谢!

编辑 在第一个 for 循环中添加标记和分隔符使这个过程更容易,因为它将字符串分成两部分。

这使得原始代码中出现的很多问题甚至都不存在。我仍然很好奇为什么原始片段不起作用,所以我将保留那部分。

0 投票
1 回答
232 浏览

batch-file - 批处理如何逃避/忽略“!” 在启用延迟扩展的字符串变量中

我必须用批处理重命名一些文件,但在某些文件名中是感叹号,会导致语法错误。有人有解决方案吗?

0 投票
0 回答
139 浏览

batch-file - 使用延迟扩展替换字符串(区分大小写) - 批量

我想编写一个非常简单的脚本来“编码”和“解码”字符串,方法是用数字替换每个字符,并启用延迟扩展。但是我使用的语法应该是错误的,因为它根本不起作用。

另外,有没有办法执行区分大小写的替换,以恢复原始字符串?

谢谢!

0 投票
0 回答
508 浏览

batch-file - Windows Batch - 变量作为字符串偏移量?从多个文件中提取数据

前言:
事情在工作中被锁定了,我不能在 Excel 中使用 powershell 或任何宏/脚本。我不能将文件带到异地或在个人计算机上使用。我无权访问文件的原始程序。我似乎仅限于批处理脚本。

情况:
我在离线机器上有几百个带有系统信息的 csv 文件,我试图提取第 2 行,然后附加第 3、6 和 20 行的第 4 和第 5 字段。将其导出到新的 . .csv 文件

第一行在后续行中重复,因此我创建了一个函数来识别第 1 行的长度并将其存储在一个变量中以用作后续字符串的偏移量(第 3、6、20 行)。

我将各种行放入变量中,然后将变量回显到文件中。到目前为止,我只关心第 2 行和第 3 行,直到我弄清楚这一点。我要崩溃的地方是我似乎无法将变量用作另一个变量中的偏移量。这总是作为整个字符串出现。
例如:!Ln3:~%L1Len%!

甚至可以按照我尝试的方式做到这一点吗?
是否有另一种方法(在 Windows 批处理中)?

我认为必须有一种方法来使用findstr /C:"Edition ID" dc- .csv* (对于第 6 行)并将该行的其余部分输出到一个变量,但我还没有弄清楚。它也不适用于其他行上的数据,因为这些前导字符的文件中有多个实例。

如果没有,我将只回显行变量,然后手动删除 Excel 中的列。在这一点上可能更快,但我无法弄清楚这一点让我感到沮丧!

这是我当前的 .bat 文件:

源文件内容如下所示:

最终目标:

0 投票
2 回答
54 浏览

string - 在尝试修复嵌套延迟扩展问题时,在函数的 else 情况下添加 for 循环导致的莫名其妙的行为

前言

我是批处理新手,已经做了大约 2 周。当我向它添加特定的 for 循环时,我的函数没有遵循我认为正常的程序流程规则。删除 for 循环后,函数遵循我期望的程序流程,但输出仍然不是我想要的。根本问题是延迟扩展变量中的延迟扩展变量。

我已经多次检查了括号,在靠近底部的完整代码中我找不到任何关于它们的不平衡之处。程序流程明智,这没有任何意义,添加 for 循环会影响 for 循环之前的语句。我唯一能想到的是发生了一些奇怪的错误,代码根本没有执行完整的循环并在循环之后立即到达我的暂停语句。

我实际上正在尝试做的事情

我正在尝试用 ; 分隔单行字符串 在我想稍后分隔的字符串中使用未知/可变数量的标记和其他可能的分隔符(如逗号)。这不能通过批处理预先制作的 for 循环来完成,FOR / F 只能同时执行行和/或设置标记数以及常规 for 循环由分号和逗号分隔。我想先用分号分隔,然后再用逗号分隔。为此,我试图用标签制作自己的简单分割线。我遇到了一个涉及延迟扩展我的变量的问题。这里的例子:

不是完整的代码,而是延迟扩展问题的代码

我想从函数的这个特定部分得到什么

示例输入:

期望的输出示例:一个 For 循环(上面的标签),其中每次迭代都采用一个由 ; 分隔的字符串。所以第一次迭代会Enable Echo Ping Request ICMPv4取值。上面的重点是获取输入并以某种方式对其进行子串化,以便每次迭代都由分号分隔

上面的代码,特别是最后一行导致了问题,因为(我认为)程序将其读取为延迟扩展!TestArgument:~%DelimIndex%,!(这会出错)然后!(这没什么)只留下 LengthToSearch 作为原始字符串。我想要的是在子字符串操作之前扩展 LengthToSearch 值,然后扩展/运行/执行子字符串操作的扩展并将其设置为 CurrentArg(由 ; 分隔的单行字符串)。我不能将 % 符号与 LengthtoSearch 一起使用,因为它似乎与子字符串操作在同一范围内,但是我可以将 % 符号与 DelimIndex 一起使用(因为那超出了范围?我不知道)。

我试过的

我尝试了子字符串行(最后一行)的变体,包括:

  • SET "currentArg=!TestArgument:~%DelimIndex%,%LengthToSearch%!什么都不打印。
  • SET "currentArg=!TestArgument:~%DelimIndex%,!!LengthToSearch!!!打印 31(DelimIndex 的文字参数)。
  • SET "currentArg=%TestArgument:~%DelimIndex%,!!LengthToSearch!!%什么都不打印。
  • SET "currentArg=%TestArgument:~%DelimIndex%,!LengthToSearch!%什么都不打印。

我已经尝试了其他一些,但它们肯定是不对的。我认为应该是这样的

  • SET "currentArg=!TestArgument:~%DelimIndex%,!LengthToSearch!!.

方式,但这只是有上述问题。我在这里做了一些研究,发现其他人的字符串搜索和替换问题与我的问题相似,他们使用 FOR 循环将延迟扩展值插入到延迟扩展子字符串操作中作​​为 for 循环参数。我想我可以使用相同的方法,所以我尝试了这个(对最后一行有很大的改变):

那就是事情变得非常奇怪的时候。出于某种原因,添加 forloop 会导致整个 ELSE 案例无法执行。当我运行我的代码时,

只“运行”一次(它并没有真正运行它应该运行的所有内容),然后循环就真的中断了。我并不是说它走到了循环的末尾,它只是完全忽略了整个函数的其余部分。我在此处的完整代码中多次检查了括号:

完整的功能代码

并且第二个 IF ( ) 的 ELSE 情况下的IF NOT "!TestArgument:~%CurrentIndex%,1!"==";"任何回声,以及第二个 IF 之前的任何其他回声都不会真正发生。这对我来说绝对没有意义,我无法理解为什么在添加 for 循环时它会忽略程序流,而在注释掉 for 循环时程序流可以工作。我想要做的就是有一个 for 循环,每个我可以指定的分隔符循环一次。我唯一的猜测是发生了一些错误,导致它直接进入 EOF。在我的函数被调用之后会有一个暂停,因为我的程序的其余部分应该是无关紧要的。而我目前正在研究这一部分。该函数的输入如下所示:

函数调用示例:

我非常沮丧,我只需要一些帮助。我会继续尝试各种事情,但这是我需要完成的程序的最后一部分,我只想获得稳定、有效和高效的东西,而不必做我以前做过的事情,使用行列和幻数来检查通过令牌设置防火墙。(我正在测试一个脚本来配置一些设置,以便可以设置公司网络)。

0 投票
1 回答
74 浏览

batch-file - 仅当该目录存在批处理脚本时才在目录中查找最新的子文件夹

仅当该目录存在时,我才尝试在目录中查找最新的子文件夹。当我在语句中使用FOR循环时,我的代码没有给我任何输出。IF这是我的代码 -

我的代码单独工作正常

1.单独检查目录是否存在,

2. 要查找最近的文件夹,

FOR基本上,当我不结合循环和IF语句时,我会得到最新文件夹的正确输出。我在这里观察到的是,当我们在语句中使用循环时,代码会回显变量“abc”的空白输出。我的问题是,批处理脚本不允许我们在 IF 语句中使用循环吗?如果是这样,我可以在这里采取任何解决方法来达到预期的结果吗?FORIFFOR

0 投票
2 回答
144 浏览

batch-file - 批处理:从 .properties 文件中读取包含特殊字符的值

我有两个文件。

值.属性

我的批处理文件

在批处理文件中,密码的值为:

所以基本上,“!” 消失。我想让“密码”存储任何值,无论包含什么特殊字符。我怎样才能做到这一点?我试图逃避“!” 添加“密码=^^%%B”。不工作。

谢谢你。