Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用in循环对批处理中的字符进行计数_Loops_Batch File_Count - Fatal编程技术网

Loops 使用in循环对批处理中的字符进行计数

Loops 使用in循环对批处理中的字符进行计数,loops,batch-file,count,Loops,Batch File,Count,我尝试在文件名超过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%

我尝试在文件名超过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
@ECHO关闭
延迟扩展
对于(*)中的/R%%f,请执行以下操作(

set/p val=您没有使用先前启用的
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 /?

向下滚动到延迟环境部分。

您真正的问题是
我试图在文件名超过16个字符的目录(带有子目录)中获取(回显)文件。

dir/s/b??????*
不起作用,因为通配符
表示
零或一个字符

很高兴地
其中
以不同的方式处理通配符:
正好是一个字符
*
任意数量的字符(包括零)

因此,下面一行应该完全按照您的要求执行:显示名称加扩展名(根据您的代码尝试
%~nxf
)为16个字符或更多的所有文件:

 where /r . ????????????????*
where /r . ????????????????*.*
要获取名称不带扩展名为16个字符或更多的所有文件,请执行以下操作:

 where /r . ????????????????*
where /r . ????????????????*.*
(可能会出现误报,如
file.with.multive.extensions.txt
file无扩展名
——其中
false
取决于您的期望)