我正在尝试创建一个.bat文件,该文件将运行给定文件夹中的所有文件,测量文件+路径的长度以及是否长于例如。将50个字符的文件和路径写入.txt文件。
我几乎是一个n00b,所以不要先进,有点好解释;)。
使用
写入文件echo%File%> filer.txt
文件应包含文件名和路径。
编辑: 对不起,我在描述它应该执行的任务时可能有点不清楚。我的目的是,循环文件和给定文件夹的子文件夹。并在文档中返回路径长于50的文件,包括Drive和Filetype。
答案 0 :(得分:2)
正如Dennis已经指出的那样,批处理没有内置的解决方案来获得路径的长度。但是,如果您只想知道,如果字符串大于n
,请检查n+1
位置是否有字符:
if "%string:~51,1%" neq "" echo %string% is longer than 50 characters
比计算字符要快得多。
结合丹尼斯'逻辑:
@echo off
setlocal EnableDelayedExpansion
(
for %%g in ("*") do (
set "File=%%~dpnxg"
if "!File:~51,1!" neq "" echo !File!
)
)>filer.txt
我将整个for
循环放到另一个块中,只将一次重定向到输出文件。这要快得多(>>
会打开文件,写一行并关闭文件,只是再次打开它等等。)
答案 1 :(得分:1)
你可以用这个:
@echo off
setlocal EnableDelayedExpansion
for %%g in ("*") do (
set "File=%%~dpnxg"
>x echo !File!&for %%? in (x) do set /a strlength=%%~z? - 2&del x
if !strlength! gtr 50 echo !File! >> filer.txt
)
循环遍历当前文件夹中的所有文件,并将其驱动器,路径,名称和扩展名放在变量%File%
中。然后它将%File%
写入临时文件x,并从中获取stringlength,并删除x。如果字符串长度大于50,则将文件名写入filer.txt
。
你需要delayed expansion
来处理循环中的变量。
注意,此代码目前使用驱动器,路径,文件名和扩展名。更改第set "File=%%~dpnxg"
行以更改此行为([d]rive, [p]ath, [n]ame, e[x]tension
,g
是必需的)