首页 > 解决方案 > 在循环中批量计数字符

问题描述

我尝试获取(回显)文件名超过 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 个字符?

标签: loopsbatch-filecount

解决方案


您没有使用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部分。


推荐阅读