批处理检测文件夹大小

2024-11-23 11:47:12
推荐回答(3个)
回答1:

批处理练习(3) 文件处理 制作进度条 判断字符长度2011-06-18 18:25题1:批处理修改文件夹名。

在一个历史学院的文件夹里有2530个子文件夹,里面都有这个学院的学生的资料。这些子文件夹是:12位的学生学号和对应学号

的姓名:104052020001陈娜娜 104052020002马克林那 104052020003林肯 。。。。

现在我们只想保留这些学号的后4位,也就是号数如:1 2 3 ......

请写上你的答案,一起分享吧!!

因为原来的文件夹里有内容,所以我们是将源文件夹进行重命名,使用ren

又是对一堆文件夹进行操作,所以使用 for /d

还有就是处理像0010这样的又不能直接%b:0=%所以就想用for /f “tokens=* delims=0”

我就在这个历史学院的文件夹里建立一个批处理,我的代码:

@echo off
setlocal enabledelayedexpansion
for /d %%a in (*) do (
set n=%%a
set nn=!n:~8,4!
for /f "tokens=* delims=0" %%b in ("!nn!") do (
set rn=%%b
ren %%a !rn!
)
)
pause

题2:如何去除文本文档里所有重复的字符串?并进行处理

在1.txt文档里有很多字符串都以空格相连:

1 2 3 6 5656 不要 去死 999

2 我是谁 xx ff不要 999 56565

......

用批处理将没有重复的所有字符串提取出来放在2.txt中。

我的答案:

用定义变量的方法,就是没拿到其中的每一个字符串,是新的就对他进行定义,是已经定义了的就跳过,这就

用到了if not defined 变量名 (定义新字符串 )

那我们如何取得每一个字符串呢?用for /f “delims= ” %%a in (1.txt)这样的话tokens又该怎么办成千上万的字符串啊!

想到因为每个字符串都间都有空格,用没有参数的for就可以取得每一个字符串了。可是没有参数的for在括号里的只能是

字符串啊,我们该如何把1.txt离得内容给放到括号里呢。我是用for /f “delims=”一行一行的放进去的。

我在当前文件夹下建立批处理文件内容如下:

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (1.txt) do (
for %%b in (%%a) do (
if not defined %%b (
set %%b=1

rem 这里是随意给个值
set /p=%%b )))>>2.txt

rem 这里如果用>2.txt 试试看会有什么结果说明了什么
pause

如果你觉得在()>>2.txt 很不习惯你也可以在用:set m=!m! %%b 在for前定义一个空变量set "m=" 然后再for后输出m:echo !m!>2.txt

当然了最简单的还是用:set /p=%%b >2.txt用同行输出再导入2.txt。

好!做到这里就得到了2.txt。可是由于使用set /p=%%b
为此我们再来练习一下:就是把上面的2.txt进行整理使之每一行都只有10个字符串。

下面是我的代码:

@echo off
setlocal enabledelayedexpansion
set /a n=0
for /f "delims=" %%a in (2.txt) do (
for %%b in (%%a)do (
set /a n+=1
if !n!==10 (
echo %%b >>1111.txt
set /a n=0
) else (
set /p=%%b >1111.txt
)))
pause
那如果原来的字符串不是都在同一行的话,也就是每行都有不定个字符串,又该怎么办?把不熟悉的化成熟悉的呗。

不是同一行我们就把它变成同一行(这个也不难),然后就简单喽!

得出了1111.txt。现在我又想从1111.txt中查看一些字符串共出现了多少次。

我的代码如下:

@echo off
setlocal enabledelayedexpansion

echo 从1111.txt中查找字符串出现的次数
set /p cc=您要查找的是:
set /a n=0
for /f "delims=" %%a in (1111.txt) do (
for %%b in (%%a) do (
if "%%b"=="!cc!" (
set /a n+=1
)))
echo 所查找的!cc!共出现了!n!次。
pause

题3:制作一个进度条。

网上好多关于用批处理制作进度条的,于是自己也想试着做一下,刚开始的代码:

@echo off
echo ┏━━━━━━━━━┓
set /p "a= "for /l %%a in (1 1 10) do (
set /p=■ping /n 1 192.168.1.106>nul
)
echo.
echo ┗━━━━━━━━━┛
pause

哈哈!!!结果很悲剧!边框都不完整两边都没有,而且是先显示的只有上边框没有下边框。

就想着上网去看,发现看代码真是蛋疼,相当的晕!!!

无奈只好自己慢慢想把。

要想同时显示上下边框这个简单只要把边框全部放入for循环中。

至于显示边框的两边,要结局的就是对其,我就想到用 %变量:~0,数值% 来解决了,但是又发现■占两个空格,这就说明

%%里的数值不是固定植,正好for /l 循环中的数是变化的,就可以拿来用了。

改进后的代码:

@echo off
setlocal enabledelayedexpansion
color 1f
set "nn=■"
for /l %%a in (39 -1 20) do (
cls
rem 刚开始没这个,结果一列下来,悲剧!
set "nnn=!nn! "
set m=!nnn:~0,%%a!
echo ┏━━━━━━━━━━━━━━━━━━━━┓
set /p=┃set /p=!m!echo ┃
echo ┗━━━━━━━━━━━━━━━━━━━━┛
set nn=!nn!■
ping /n 2 192.168.1.103>nul
rem 时间延时用,这里ping的地址在测试时自行更换,当然了也可以用for及其他的时间延时方法,很多

rem 可是很多我还不理解,继续学习以后可能也会做个总结。
)
pause

题4:(复习)如何检测给定字符串的长度?

这个做过了,以前不会,现在会了自己也写一写。如下:

@echo off
title 字符长度查看
color 0f
mode con cols=40 lines=25
echo.&echo.
echo ----------------------------
echo.&echo.&echo.&echo.&echo.
setlocal enabledelayedexpansion
set /p b=输入的要判断的字符串:
set a=!b!
:aa
if "!a!" neq "" (
set /a n+=1
set a=!a:~0,-1!
goto aa
)
echo.&echo.&echo.&echo.
echo 您输入的!b!字长为:!n!
echo.&echo.&echo.&echo.&echo.
echo 再见!
echo.&echo.
echo --------------------------pause>nul

回答2:

@echo off
set dir=C:\test
set /a s=1024*1024*1024
for /f "tokens=3 delims= " %%i in ('dir /s /a /-c "%dir%" ^|findstr 个文件') do (set z=%%i)
echo 文件夹:%dir%&echo.
echo 总大小:%z%&echo.
if %z% LSS %s% echo 该文件夹内容小于1G
pause>nul

回答3:

@echo off & setlocal enabledelayedexpansion
set "folder=D:\Program Files\Call of Duty"
::folder为路径。不算很准。但是如果不是1GB左右差别很小(很小的)的可以计算出来。
for /f "tokens=* delims=" %%i in ('dir /a-d /b /s "%folder%"') do set /a num+=%%~zi/1024
if !num! gtr 1048576 (echo 该文件夹大于1G) else (echo 该文件夹内容小于1G)
pause