Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 试图在批处理文件中保存变量不典型的命令行参数_Batch File - Fatal编程技术网

Batch file 试图在批处理文件中保存变量不典型的命令行参数

Batch file 试图在批处理文件中保存变量不典型的命令行参数,batch-file,Batch File,想知道如何接收批处理文件命令行参数,如以下参数,并将其存储在变量中- file.bat /* */ # /* /* */ # 我尝试了这个,我得到了那些有斜杠的文件名。我独自尝试了散列(#),效果很好,但没有斜杠。我能逃脱他们吗 回答下面的问题-这是不起作用的部分- SETLOCAL ENABLEDELAYEDEXPANSION set count=1 FOR %%i in (%*) do ( set var!count!=%%i set /a count=!count!+1 ) 下面的答案

想知道如何接收批处理文件命令行参数,如以下参数,并将其存储在变量中-

file.bat /* */ # /* /* */ #
我尝试了这个,我得到了那些有斜杠的文件名。我独自尝试了散列(#),效果很好,但没有斜杠。我能逃脱他们吗

回答下面的问题-这是不起作用的部分-

SETLOCAL ENABLEDELAYEDEXPANSION
set count=1
FOR %%i in (%*) do (
set var!count!=%%i
set /a count=!count!+1
)

下面的答案解决了这个问题。

好的,我通过查看您网站上删除的帖子,解决了您的问题。在您删除的回复(应该是对您的问题的评论或编辑)中,您声明:

谢谢大家,虽然我看到了一些我没有看到的东西,但效果很好 期待。看起来我在命令的某些部分有1、2和3个数字 我不想改变的台词。我需要命令行参数3到26 只是以这种方式改变了,所以我会继续努力

另一个注意事项是,我之所以采用这种方法,是因为我尝试了 /*、*/和#直接在命令行和返回变量I中 正在从我的计算机上获取一些文件名。我想 反斜杠以某种方式被解释为文件名

有没有办法直接在命令行和中使用/*、*/和# 正确地将它们作为变量引入?如果不是,我会和我的朋友呆在一起 编号方法

查看该问题中的代码,我发现您正试图通过FOR循环迭代参数。只要所有参数都不包含
*
,这就很好了。不幸的是,没有办法转义这些字符以获得您想要的结果

我知道的唯一好的解决方案是使用带有SHIFT的GOTO循环来迭代参数

@echo off
setlocal

set n=0
:parseArgs
set /a n+=1
(set arg%n%=%1)
if defined arg%n% (
  shift /1
  goto :parseArgs
)

::display the parsed arguments
set arg

好的,我通过查看你网站上的一篇被删除的帖子,解决了你的问题。在您删除的回复(应该是对您的问题的评论或编辑)中,您声明:

谢谢大家,虽然我看到了一些我没有看到的东西,但效果很好 期待。看起来我在命令的某些部分有1、2和3个数字 我不想改变的台词。我需要命令行参数3到26 只是以这种方式改变了,所以我会继续努力

另一个注意事项是,我之所以采用这种方法,是因为我尝试了 /*、*/和#直接在命令行和返回变量I中 正在从我的计算机上获取一些文件名。我想 反斜杠以某种方式被解释为文件名

有没有办法直接在命令行和中使用/*、*/和# 正确地将它们作为变量引入?如果不是,我会和我的朋友呆在一起 编号方法

查看该问题中的代码,我发现您正试图通过FOR循环迭代参数。只要所有参数都不包含
*
,这就很好了。不幸的是,没有办法转义这些字符以获得您想要的结果

我知道的唯一好的解决方案是使用带有SHIFT的GOTO循环来迭代参数

@echo off
setlocal

set n=0
:parseArgs
set /a n+=1
(set arg%n%=%1)
if defined arg%n% (
  shift /1
  goto :parseArgs
)

::display the parsed arguments
set arg

我认为没有任何转义序列可以在命令行参数上使用来解决问题。请在批处理脚本中显示不起作用的代码(编辑您的问题)。我可以猜测您可能尝试了什么,但我不能确定。我不认为您可以在命令行参数上使用任何转义序列来解决问题。请在批处理脚本中显示不起作用的代码(编辑您的问题)。我能猜到你可能尝试了什么,但我不能肯定。