“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 %%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
允许循环遍历指定目录中的所有文件夹之前,您错过了do
。 dir M:\Serienbriefauftrag\%%d /T:C
不是目录,而是命令。 如果您想迭代该命令的输出,则必须使用/f
并将该参数的内容放在单引号中,如('dir M:\Serienbriefauftrag\%%d /T:C')
。
请改善主题行,以便对网站的未来访问者更有用。如此一来,该文章有可能因为本地化过度而被封闭。 (第10行没有其他人会遇到问题,或者如果他们这样做,这不会是你遇到的同样的问题。) –
缺少'do'和'echo %% b'必须是在同一行上。 – jeb