【发布时间】:2014-04-04 11:55:33
【问题描述】:
我正在尝试编写一个批处理文件,它将名为 VPARM1、VPARM2 等的变量设置为命令行变量 %1、%2 等的内容。这有一个转折点:如果%1、%2 等是现有文件的名称,我想将其解析为路径和文件名并清除原始变量。
在另一个线程中,Matt Williamson 向我展示了如何将现有文件的名称解析为其部分,如下所示(他的代码):
@echo off
setlocal EnableDelayedExpansion
FOR %%a IN (%*) DO (
if exist %%a set VDOSPATH="%%~dpa"
if exist %%a set VDOSFILE="%%~nxa"
echo(!VDOSPATH! !VDOSFILE!
)
我现在要做的是:如果 %1、%2 等不是现有文件名,我想将变量 VPARM# 设置为 %# 的内容,这样如果 %3 是“你好" 我想以 VPARM3="hello" 结尾,但如果 %2 是现有文件的名称,我不希望 VPARM2 存在。
我尝试了多种 FOR /L 和引号来处理 %1、%2 等,但根本没有任何效果。对于这方面的任何帮助,我将不胜感激。同样,答案对专家来说可能是显而易见的,但对我来说却不是。
附:我需要设置 VPARM 变量的原因是我的批处理文件打开了一个可以从环境中读取这些变量的程序。但另一个程序本身不接受参数,也不知道如何处理批处理文件中设置的 %1、%2 等。 (我希望这很清楚。)
编辑:感谢 Magoo 在下面的回答,我能够编写这个批处理文件(1)如果参数作为文件存在并且(2)将命令行参数解析为路径和文件名(VDOSPATH 和 VDOSFILE) ) 将其他命令行参数设置为新的命名参数(VPARM1、VPARM2 等):
setlocal EnableDelayedExpansion
set /a fcount=0
FOR %%a IN (%*) DO (
set /a fcount+=1
if exist %%a (
set VDOSPATH="%%~dpa"
set VDOSFILE="%%~nxa"
) else (
set VPARM!fcount!=%%a
)
)
再次感谢您!
【问题讨论】:
标签: windows batch-file for-loop cmd