“for”命令的语法:在下面的批处理文件中第10行有什么错误?

问题描述:

1 echo off 
    2 
    3 echo Please enter a date 
    4 set /p a= 
    5 echo %a% 
    6 for /D %%d in (M:\Serienbriefauftrag\*) do (
    7 if not exist %%d\Erledigt\*.bat echo %%d 
    8) 
    9 pause 
    10 for /d %%b in (dir M:\Serienbriefauftrag\%%d /T:C) 
    11 echo %%b 
    12 pause 

该代码工作正常,直到第10行(语法错误)的目标是获取文件夹的创建日期与“%a%”进行比较,并且如果它在输入日期“%a%”下,该文件夹应该被移动。但不知何故...“for”命令的语法:在下面的批处理文件中第10行有什么错误?

找到一种方式来获得的创建日期

if not exist %%d\Erledigt\*.bat echo %%~td|findstr /i /l 

的新任务是使​​输出 “calculateable”

+1

请改善主题行,以便对网站的未来访问者更有用。如此一来,该文章有可能因为本地化过度而被封闭。 (第10行没有其他人会遇到问题,或者如果他们这样做,这不会是你遇到的同样的问题。) –

+1

缺少'do'和'echo %% b'必须是在同一行上。 – jeb

两件事情:

1)行10 %%d未定义(空),因为第一个循环(定义它的位置)的范围留在第8行。 您可以设置另一个变量为%%d,以便能够在循环结束后使用它,但要小心。批量使用for中的set循环有点tricky。为了避免使用延迟变量扩展,我建议你在工作时留在循环内部。

@echo off 
set /p a=Please enter a date: 
for /d %%d in (M:\Serienbriefauftrag\*) do (
    if not exist %%d\Erledigt\*.bat (
     :: Do whatever you want with %%d in here 
     echo "%%d" 
    ) 
) 
pause 

2)你的第二个循环的语法是错误的。在循环主体和/d允许循环遍历指定目录中的所有文件夹之前,您错过了dodir M:\Serienbriefauftrag\%%d /T:C不是目录,而是命令。 如果您想迭代该命令的输出,则必须使用/f并将该参数的内容放在单引号中,如('dir M:\Serienbriefauftrag\%%d /T:C')