windows - 批量比较文件的年份和大小时出现问题
问题描述
我对在 for 循环中进行比较(if 语句)表示怀疑:我在一个文件夹中有很多文件,我想进行两个比较:
- 如果文件是在当年创建的 (!dateFile:~6,4!equ %date:~6,4%)
- 如果文件大小为0字节(%%~Za equ 0)
当我找到符合这些条件的文件时,我想显示“ok”。
我有下一行代码,但它不起作用:
for /f "tokens=* delims= " %%a in ('dir /s/b/a-d "FOLDER\"') do set dateFile=%%~ta if ((!dateFile:~6,4! equ %date:~6,4%) & (%%~Za equ 0)) echo "ok"
一些帮助?谢谢 :)
解决方案
代码有几个问题:
首先:您的set
命令向变量添加的内容比您想要的要多。
使用首选语法set "var=value"
来避免这种情况。
第二:要连接命令,请使用&
(在您的代码中缺少set
and if
)
第三:您的if
语法已关闭。if (a equ a) & (b equ b) ...
不起作用。
你想要if a equ a if b equ b ...
。
第四:另一个(意外)问题:由于延迟扩展发生时,逗号!var:6,4!
不安全并杀死if
语法。引用比较的两边以避免这种情况(强制进行字符串比较,但逗号和其他“毒字符”在引号内是安全的)。
总而言之,以下内容应该适合您:
for /f "tokens=* delims= " %%a in ('dir /s/b/a-d ') do set "dateFile=%%~ta" & if "!dateFile:~6,4!" equ "!date:~6,4!" if %%~Za equ 0 echo "ok"
虽然我不喜欢“单线”解决方案——它们往往难以阅读,甚至更难维护,所以我建议使用:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims= " %%a in ('dir /s/b/a-d ') do (
set "dateFile=%%~ta"
if "!dateFile:~6,4!" equ "!date:~6,4!" if %%~Za equ 0 echo "ok"
)
推荐阅读
- javascript - 如何在画布内的fabricjs对象上触发tippyjs工具提示
- c# - c# 四舍五入到小数点后两位得到 25.00
- python - Apache Beam 侧输入在 Python SDK 的流式数据流管道中不起作用
- animation - 虚幻引擎 - 跑步而不是走路
- python - #X 格式说明符真的应该使“0x”前缀大写吗?
- bootstrap-vue - 声明 bootstrap-vue 按钮的最佳方法是什么?
- html - 使用 HTML 表单同时提交数据和文件
- java - 如何在方法签名中使用多态性、泛型?
- html - 即使 mat-card 具有不同尺寸/纵横比的图像,它的尺寸是否一致?
- python - 列表中的连续值(python)