我在检查文件夹的 D 驱动器子目录的文件夹中有几个文件,名称为 cp1_2015_09_10.txt cp3_2015_09_11.txt kmps_2014_08_03.txt 和 cpms_2015_07_10.txt ksms_2015_10_07.txt。我想从 for 循环中删除文件名,例如 _2015_10_07 表示今天的日期
setlocal
SET /A MAXJ=1
SET /A J=1
set year=%date:~10,4%
set year=%year: =%
echo %year%
set month=%date:~7,2%
set month=%month: =%
set day=%date:~4,2%
set day=%day: =%
FOR /F "usebackq tokens=*" %%i IN (DIR /S /B D:\check\*.txt| find /v "_%year%_%month%_%day%") DO (
SET XCOUNT_!J!=%%~i
SET MAXJ=!J!
SET /A J+=1)
SET XCOUNT
SET /A J-=1
@echo COUNT OF FILES IS : %J%
PAUSE
答案1
我想从 for 循环中删除文件名
FOR /F "usebackq tokens=*" %%i IN (DIR /S /B D:\check\*.txt| find /v "_%year%_%month%_%day%") DO (
您的for
语法有两点不正确:
您正在使用
usebackq
- 这意味着命令参数
for
必须用反引号分隔`
- 这意味着命令参数
您没有转义管道符号。
- 用以下符号替换管道
|
符号^|
- 用以下符号替换管道
更正后的for
命令:
FOR /F "usebackq tokens=*" %%i IN (`DIR /S /B D:\check\*.txt ^| find /v "_%year%_%month%_%day%"`) DO (
您的批处理文件中可能还存在其他错误...
句法
FOR /F ["options"] %%参数 IN ('command_to_process') DO 命令
钥匙
选项:
usebackq 使用替代引用样式:
- 在“filenameset”中,对长文件名使用双引号。
- 使用单引号表示“要处理的文本字符串”
- 使用反引号
command_to_process
来源对于/f
转义符
^
转义符。
在命令符号前添加转义字符可以将其视为普通文本。
&
当对、\
、<
、>
或这些字符进行管道传输或重定向时^
,|
应在其前面加上转义字符。
例如^\
^&
^|
^>
^<
^^
来源句法
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/f- 循环命令以执行另一个命令的结果。
- 句法- 转义字符、分隔符和引号。