【发布时间】:2009-09-15 13:35:23
【问题描述】:
我有下面的命令来计算所有遵循20?????? 模式的目录:
'dir /b "20??????" | find /c "2"'
例如,如果我有以下目录,该命令将返回 6:
20090901
20090902
20090903
20090904
20090905
20090906
如何将该命令的结果(前面提到的示例中为 6)存储在变量中?
【问题讨论】:
标签: batch-file
我有下面的命令来计算所有遵循20?????? 模式的目录:
'dir /b "20??????" | find /c "2"'
例如,如果我有以下目录,该命令将返回 6:
20090901
20090902
20090903
20090904
20090905
20090906
如何将该命令的结果(前面提到的示例中为 6)存储在变量中?
【问题讨论】:
标签: batch-file
set cmd="dir /b "20??????" | find /c "2" "
FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET X=%%i
【讨论】:
for 命令中两次将 %i 替换为 %%i。
FOR完成将命令结果分配给变量确实是一个奇迹。
FOR /F "tokens=*" %i IN (' %cmd% ') DO SET X=%i tokens 命令的其他用途,例如删除第二列:FOR /F "tokens=1,3*" %i IN (' %cmd% ') DO SET X=%i %j %k 即 i 等于第一列,j 等于第三列,k 等于第四列,以此类推。它确实假设分隔符是一个空格(在 SET 部分中),因此如果需要,请修改它(您可以定义分隔符,方法与定义标记的方式相同)。问号是你的朋友! FOR /?
(dir /b "20??????" | find /c "2")>>x.txt
set /p variable=<x.txt
就是这样。
当然,如果您不想要该文件,请在之后执行此操作:
del x.txt
EDIT -- 如何使文件名唯一:
@Mai:用它来创建一个唯一的文件名:
set timestamp=%date:.=%%time::=%
set timestamp=%timestamp:,=%
set timestamp=%timestamp:/=%
set timestamp=%timestamp:-=%
set filename=file%timestamp%.tmp
如果您的系统文化的日期格式中包含其他字符,请添加更多替换
【讨论】:
这是一个示例:
@echo off
set wildcard=C:\*.*
set count=0
FOR /F %%a in ('DIR /B %wildcard%') do set /A count=count+1
echo %count% files matching %wildcard%
set choice=
set /p choice=Press enter to continue ...
【讨论】:
这是我的代码:
@echo off
set com=echo HI
::Start Of Code You Need
echo|%com%>>"%temp%\tmp.txt"
for /f "tokens=* delims=" %%x in (%temp%\tmp.txt) do (
set output=%%x
)
del /q %temp%\tmp.txt
::End Of Code You Need
echo This Is The Output:
echo %output%
pause>NUL
它接受来自com 的输入和来自output 的输出
【讨论】:
@echo off
REM The command fltmc volumes provides some information about drives
REM I need to extract the drive letter associated to a particular volume name.
REM Here's how:
fltmc volumes | find /i "\Device\HarddiskVolume3" > delme.txt
for /f "tokens=1 delims= " %%i in (delme.txt) DO echo %%i
Del /f delme.txt
【讨论】: