不要问我为什么,但我尝试创建一个由文件夹组成的5位数代码。 以下代码似乎很有希望,但是在文件夹0 \ 0 \ 1 \ 0它崩溃:它返回0 \ 0 \ 1 \ 0 \%E%已经存在。 可以在代码中找到%E%的定义。
compile <<= (compile in Compile).dependsOn((scalastyle in Compile).toTask(""))
一起寻找修复程序或新版本。
答案 0 :(得分:2)
@JosefStyons在他的answer中发现了核心问题:值中的数字后面有空格;但除了A
之外,所有变量实际上都是如此
这是由if
命令行引起的 - 让我们选择一个作为示例:
if %E%==10 (set E=0 && set /a D=D+1)
问题的原因是set E=0
命令后面的 space 。当然,其他if
行也是如此。
要解决该问题,您可以执行以下任一操作:
if %E%==10 (set "E=0" && set /a D=D+1)
或:
if %E%==10 ((set E=0) && set /a D=D+1)
或甚至(但可读性降低):
if %E%==10 (set E=0&& set /a D=D+1)
set /A
个实例不存在问题,因为它们将值视为数字值,而没有set
开关的/A
命令则将值视为字符串。
答案 1 :(得分:2)
下面的批处理文件是等效的,但更简单的解决方案:
@echo off
set ABCDE=99999
:loop
set /A ABCDE+=1
mkdir %ABCDE:~1,1%\%ABCDE:~2,1%\%ABCDE:~3,1%\%ABCDE:~4,1%\%ABCDE:~5,1%
if %ABCDE% neq 199999 goto loop
echo 111.111 folders have been made
pause
答案 2 :(得分:1)
你的%D%在第一次迭代后获得一个尾随空格,因此MKDIR语句最终会像这样大约100个文件夹(注意空格):
...
mkdir 0\0\0\9\7
mkdir 0\0\0\9\8
mkdir 0\0\0\9\9
mkdir 0\0\1\0 \0 <--space
mkdir 0\0\1\0 \1 <--space
mkdir 0\0\1\0 \2 <--space
mkdir 0\0\1\0 \3 <--space
mkdir 0\0\1\0 \4 <--space
mkdir 0\0\1\0 \5 <--space
mkdir 0\0\1\0 \6 <--space
mkdir 0\0\1\0 \7 <--space
mkdir 0\0\1\0 \8 <--space
mkdir 0\0\1\0 \9 <--space
mkdir 0\0\1\1\0
mkdir 0\0\1\1\1
mkdir 0\0\1\1\2
mkdir 0\0\1\1\3
...
评估在空格处停止,实际上“0 \ 0 \ 1 \ 0”已经存在。
老实说,我不知道为什么这只发生在D,而不是其他变量。我可能错过了一些明显的东西。
您可以通过在“mkdir”之前添加此行来解决此问题,但是:
if "%D%"=="0 " set D=0
另一方面,调试像这样的批处理文件的一种有用的方法是删除“pause”语句,在“mkdir”前放置一个“echo”,然后将输出重定向到一个文件。您可以查看输出并查看 执行的mkdir语句。