如何使用bat脚本将命令表达式的结果存储在变量中?

Alc*_*sta 23 batch-file

我有下面的命令来计算遵循该模式的所有目录20??????:

'dir /b "20??????" | find /c "2"'
Run Code Online (Sandbox Code Playgroud)

例如,如果我有以下目录,该命令将返回6:

20090901
20090902
20090903
20090904
20090905
20090906
Run Code Online (Sandbox Code Playgroud)

如何在变量中存储此命令的结果(前面提到的示例中的6)?

Dav*_*ski 45

set cmd="dir /b "20??????" | find /c "2" "

FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET X=%%i
Run Code Online (Sandbox Code Playgroud)

  • 对于可能正在使用它的其他人来说只是一个注释:如果这是在批处理文件中完成的,``i`必须在`for`命令中用`%% i`替换. (21认同)
  • 呃,这对于带有空格的多行输出似乎不起作用? (3认同)
  • @CamiloMartin很抱歉双重评论,我不小心按了回车键.我也显然在线路上挣扎.'FOR/F"标记=*"%i IN('%cmd%')DO SET X =%i`标记命令的其他用法,例如删除第二列:"FOR/F"标记= 1, 3*"%i IN('%cmd%')DO SET X =%i%j%k`这是i等于第一列,j等于第3列,k等于第4列并且打开.它确实假定分隔符是一个空格(在SET部分中),因此如果需要,可以修改(您可以使用与定义标记相同的方式定义delim).问号是你的朋友!`FOR /?` (3认同)
  • 有关此技术的说明,请参见[此处](http://blogs.msdn.com/b/oldnewthing/archive/2012/07/31/10334556.aspx). (3认同)

Jam*_*mie 8

(dir /b "20??????" | find /c "2")>>x.txt  
set /p variable=<x.txt
Run Code Online (Sandbox Code Playgroud)

就这样.

当然,如果您不想要该文件,请在以后执行此操作:

del x.txt
Run Code Online (Sandbox Code Playgroud)

编辑 - 如何使文件名唯一:

@Mai:使用它来创建一个uniqe文件名:

set timestamp=%date:.=%%time::=%
set timestamp=%timestamp:,=%
set timestamp=%timestamp:/=%
set timestamp=%timestamp:-=%
set filename=file%timestamp%.tmp
Run Code Online (Sandbox Code Playgroud)

如果系统区域性的日期格式中包含其他字符,请添加更多替换项

  • 那么,如果已经存在名为x.txt的文件呢?(由用户或其他程序创建?) (4认同)