loops - 在循环中批量计数字符
问题描述
我尝试获取(回显)文件名超过 16 个字符的目录(带有子目录)中的文件。因此我玩弄这个脚本:
@ECHO OFF
setlocal enabledelayedexpansion
for /R %%f in (*) do (
set /p val=<%%f
REM echo "fullname: %%f"
REM echo "path: %%~pf"
REM echo "name: %%~nxf"
REM set test=%%~nxf
REM echo %test%
if "%%~nxf:~16%" == "" echo "Less than 16 characters."
if not "%%~nxf:~16%" == "" echo "Bigger than 16 characters."
)
pause
GOTO :EOF
但我得到每个文件“大于 16 个字符。”!我还尝试将 var 设置%test%
为%%~nxf
(文件名),但只得到“Echo is off”,因为%test%
没有设置 var?
如何%test%
使用文件名设置 var 以及如何获得“少于 16 个字符”。如果文件名只有 6 个字符?
解决方案
您没有使用delayedexpansion
之前启用的,也不能在元变量上使用替换或定位,您需要先将其分配给变量:
@echo off & setlocal enabledelayedexpansion
for %%i in (*) do (
set "line=%%~nxi"
if "!line:~16!"=="" (
echo !line! is less than 16 characters.
) else echo !line! is 16 or more characters.
)
cmd
通过运行查看帮助:
set /?
向下滚动到Delayed environment
部分。
推荐阅读
- node.js - 如何在 MongoDB 中仅获取数组元素而不是整个对象作为输出?
- three.js - 如何在three.js中高效地创建管子
- c++ - 带持续时间的直接输入开始效果
- uwp - 使用模板样式的 UWP 中按钮的不同边框颜色
- html - 如何垂直居中对齐我的主 div?
- recaptcha - reCaptcha V2 正在工作,但不能阻止垃圾邮件
- kubernetes - 未知标志 --from-file (Kubectl)
- reactjs - 如何在 React Admin 中共享一个对不同资源名称的 api 调用
- perl - Perl 脚本从 crontab 失败,但不是命令行
- mailkit - MailKit 2.15.0 版本断线问题