Batch file 如何为批量传递给脚本的逗号分隔参数应用循环?
我有下面列出的文件夹列表:Batch file 如何为批量传递给脚本的逗号分隔参数应用循环?,batch-file,Batch File,我有下面列出的文件夹列表: C:\程序文件 C:\temp 约翰·斯诺 我必须将逗号分隔的参数传递给脚本,如下所示: script.bat C:\Program Files,C:\temp,C:\John Snow 在传递到脚本之后,我需要过滤掉逗号分隔的参数并应用于每个循环,回显参数值并执行dir命令以列出该控制器中的文件 set "args=%*" set "args=%args:,=","%" for %%# in ("%args%") do ( dir "%%~#" ) 试试
- C:\程序文件
- C:\temp
- 约翰·斯诺
script.bat C:\Program Files,C:\temp,C:\John Snow
在传递到脚本之后,我需要过滤掉逗号分隔的参数并应用于每个循环,回显参数值并执行dir命令以列出该控制器中的文件
set "args=%*"
set "args=%args:,=","%"
for %%# in ("%args%") do (
dir "%%~#"
)
试试这个
@ECHO OFF
SETLOCAL EnableExtensions
set "_params=%*"
if not defined _params (
echo %~nx0: nothing to do
pause
exit /B
)
set "_params=%_params:,=","%"
for %%G in ("%_params%") do (
echo dir "%%~G"
)
输出
==> 37321331.bat
37321331.bat: nothing to do
Press any key to continue . . .
==> 37321331.bat C:\Program Files,C:\temp,C:\John Snow
dir "C:\Program Files"
dir "C:\temp"
dir "C:\John Snow"
==>
上面的脚本需要详细说明:如果某个参数包含在一对双引号中,则脚本将失败:
==> 37321331.bat C:\Program Files,C:\temp,"C:\John Snow"
dir "C:\Program Files"
dir "C:\temp"
dir ""C:\John"
dir "Snow"""
编辑。使用下一个代码段修复它:set“\u params=%\u params:“=%”
将从提供的字符串中删除所有的“
双引号
set "_params=%_params:"=%"
set "_params=%_params:,=","%"
for %%G in ("%_params%") do (
echo dir "%%~G"
)
资源(必读,不完整):
- (命令参考)
- (其他特殊性)
- (
,%~G
等特殊页面)%*
- (
等)%变量:strofind=NewStr%
script.bat中迭代参数,或者您想用每个项调用script.bat?我需要在script.bat中迭代参数。在for循环中,我需要对每个参数执行DIR命令。您可以传递由双引号包围的参数列表,并在脚本中使用%1访问该列表。从那里,您可以使用for/f
命令作为分隔符进行迭代。检查。@Danial Luz,如果你能为我写的话,它会更好,因为我不太擅长批处理脚本。%%#值为空,它只是列出当前的目录文件。它是这样的(我使用了ech dir“%%~”):c:\batch>com.bat“c:\Program files,c:\John Snow”dir“c:\Program”dir“files”,“c:\John”dir“dir”Snow”
It以空格作为分隔符。@ThejeshPR您要通过用双引号括起来的行吗?对我来说,它是这样来的:c:\batch>com.bat“c:\Program Files,c:\John Snow”dir“c:\Program”dir“Files”,“c:\John”dir“Snow”“@ThejeshPR这种行为我已经告诫过了:请阅读完整的答案。@ThejeshPR修正了双引号。请考虑接受最有用的答案。来解释为什么这很重要。