Windows 批处理文件环境变量顺序依赖性

Windows 批处理文件环境变量顺序依赖性

我有一个简单的批处理文件,它试图在应用程序启动之前创建一些文件夹。但我遇到了一个奇怪的问题,我不明白为什么会发生这种情况。

批处理文件采用 1 个单一参数(一个简单的单字字符串),因此我最初有:

mkdir D:\Data\App\%username%\%1%

D:\Data\App\User111\Bob这将为用户User111和参数正确创建bob。但我们想将顺序交换为:

mkdir D:\Data\App\%1%\%username%

但失败了,它创建了D:\Data\App\Bobusername:(

这与 %1% 有关但不知道是什么。

答案1

最简单的方法是使用创建文件夹的第一个直接参数,从而消除不必要的变量的创建:

mkdir "D:\Data\App\%~1\%username%"

直接使用您的%1:第一个参数 ==%1

或者,不加/删除双引号""==%~1

  • 关于:这有效,但不知道为什么......

    在此处输入图片描述

解释器正在使用它的%1论点,并忽略其第二个%在你的命令中set %db%=%1%

your batch/cmd command: set %db%=%1%
interpreter understand: set %db%=%1%
real command execution: set %db%=%1 

观察:原始命令/代码mkdir D:\Data\App\%1%\%username%结果解释:

在此处输入图片描述

解释器正在使用它的%1争论

解释器忽略不存在的变量%\%

解释器正在使用username仅作为字符串

解释器忽略了最后一个%指挥

 your batch/cmd command: mkdir D:\Data\App\%1%\%username%
 interpreter understand: mkdir D:\Data\App\%1%\%username%
 real command execution: mkdir D:\Data\App\%1username
it's the same as typing: mkdir D:\Data\App\Bobusername

答案2

我已通过%1%先分配给其他变量,然后使用它来修复此问题。因此

set %db%=%1%
mkdir D:\Data\App\%db%\%username%

这可行,但不知道为什么,或者是否有其他解决方案。

相关内容