我有一个简单的批处理文件,它试图在应用程序启动之前创建一些文件夹。但我遇到了一个奇怪的问题,我不明白为什么会发生这种情况。
批处理文件采用 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%
这可行,但不知道为什么,或者是否有其他解决方案。