bat批处理,定时执行删除某文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bat批处理,定时执行删除某文件相关的知识,希望对你有一定的参考价值。
你好,其实我想做的是,要每天定时删除某个文件夹,但是这个文件夹是每天都有按日期生成的,例如:今天0520号,我要删除0518号的。明天0521号,我要删除0519号的。最好能实施跨月删除的,例如,0601号,我要删除0530号的。
麻烦各位高手帮忙,谢谢!
@echo off&setlocal enabledelayedexpansion
:: 下一行 ds=为要删前第几天的 (可修改,但不要大于28)
set ds=2
set dy=%date:~,4%
set dm=%date:~5,2%
set dd=%date:~8,2%
set /a "feb=^!(%dy%%%4)+28"
if "%dy:~2,2%" equ "00" set/a "feb=!feb!-1+^!(%dy:~,2%%%4)"
set/a "dd-=%ds%"
if %dd% leq 0 (
set n=0
set/a dm-=1
if !dm! equ 0 set/a "dy=%dy%-1,dm=0+12"
for %%a in (31 %feb% 31 30 31 30 31 31 30 31 30 31) do (
set/a n=!n!+1
if !n! equ %dm% set/a "dd=!dd!+%%a"
)
)
if %dm% lss 10 set dm=0%dm%
if %dd% lss 10 set dd=0%dd%
if exist %dm%%dd%\. rd/s/q %dm%%dd% 参考技术A 修改后的bat:
@echo off
set deltime=09:00
::设置删除文件夹时间
(echo @echo off
echo set dd=c:\test
echo ::设置日期命名文件夹所在目录
echo set/a m=1%%date:~5,2%%-100
echo set/a d=1%%date:~8,2%%-100
echo if %%d%% geq 3 set/a d-=2^&goto delfdr
echo for %%%%i in ^(5 7 8 10 12^) do if %%m%%==%%%%i goto m30
echo set /a d=%%d%%+31-2
echo set /a m-=1
echo goto delfdr
echo :m30
echo set/a d=%%d%%+30-2
echo set/a m-=1
echo goto delfdr
echo :delfdr
echo if %%m%% lss 10 set m=0%%m%%
echo if %%d%% lss 10 set d=0%%d%%
echo if exist "%%dd%%\%%m%%%%d%%" ^(
echo del "%%dd%%\%%m%%%%d%%" /f
echo ^) else ^(
echo echo 没有找到"%%dd%%\%%m%%%%d%%"文件夹!^&pause
echo ^))>%windir%\delfolder.bat
at %deltime% %windir%\delfolder.bat
pause
说明:
忘记设置定时了。
没有写的太繁杂,条件是今年内使用没有问题。
在第二行:set deltime=后面设置每天定时删除的时间。格式为:00:00。为24小时格式。
在第五行:set dd=后面输入日期命名文件夹所在目录。 参考技术B 说明:
忘记设置定时了。
没有写的太繁杂,条件是今年内使用没有问题。
在第二行:set deltime=后面设置每天定时删除的时间。格式为:00:00。为24小时格式。
在第五行:set dd=后面输入日期命名文件夹所在目录。
BAT/CMD中将命令执行结果赋值给变量
如题,我想把ipconfig的执行结果赋值给变量a
1、将我们写好的定期清除旧数据的bat批处理文件拖到cmd命令窗口中。2、执行返回乱码报错,提示乱码字段非内部或外部命令,也不是科运行的程序或批处理文件。
3、我们打开批处理文件,批处理文件是用来定时删除1天前的zip的文件。
4、单独将语句粘贴到cmd命令行中,执行成功。
5、从新用其他字符集来写bat批处理文件即可。打开我们写好的批处理bat文件,选择文件,在文件的菜单中点击另存为选项。
6、我们将文件另存为ANSI编码的格式的bat批处理文件。
7、重新直接运行bat批处理文件或者在cmd中运行成功执行。
这句的意识是 运行ipconfig命令,并把结果通过管道命令 | 传给find命令查找将含有 ip address 字符的行 赋值给变量ip 并显示变量ip的值,/i是参数,意识是不区分大小写, ^ 符号是在批处理中,写入管道符号是要加入才行的去掉管道命令也能运行,但是结果是不一样的,你再另起一行,加一句pause来暂停,就能看到不同的结果了还有一点忘说了 tokens=15 意识是将每一行以空格作为分隔符,的第15例,的值赋值给变量ip总结:就是运行ipconfig命令,并把结果含有 ip address 字符的行,以空格为分隔符的第15例赋值给变量 %ip%,其实就是自己的ip地址 参考技术A @echo off & color 0d & setlocal enabledelayedexpansion
ipconfig>ip.txt
for /f "delims=" %%a in (ip.txt) do (
set ip=%%a
echo !ip!
)
pause>nul
:: 1. 将ipconfig的结果输出保存到文本
:: 2. 再用for语句把文本内的数据赋值给变量ip
:: 3. 最后在输出变量ip
:: 中国批处理脚本联盟追问
能不能只将红色的内容输出到1.txt,或者只截取这一段并输出?
ipconfig>ip.txt
for /f "delims=" %%a in (ip.txt) do (
for /f "tokens=1* delims=:" %%i in ('call echo %%a^|find /i "IPv4 地址"') do (
Echo %%a>>"1.txt"
)
)
del /s /q ip.txt & start 1.txt
exit
:: 已解决!!!!
:: 中国批处理脚本联盟
:: 望采纳!!!!本回答被提问者和网友采纳 参考技术B 运行一条命令时,它都会产生某种输出:要么是该命令的期望结果,或者是该命令执行细节的状态/错误消息。有些时候,你可能想要将某个命令的输出内容存储在一个变量中,以待在后续操作中取出来使用。
本文将介绍将 shell 命令赋值给变量的不同方法,这对于 shell 脚本编程是特别有用的。
可以使用如下形式的 shell 命令置换特性,将命令的输出存储到变量中:
变量名=$(命令) 变量名=$(命令 [命令选项 ...] 参数1 参数2 ...) 或者: 变量名=`命令` 变量名=`命令 [命令选项 ...] 参数1 参数2 ...`
以下是使用命令置换特性的示例:
本例,我们将 who (显示当前登录系统的用户) 的输出值存储到 CURRENT_USERS 变量中:
$ CURRENT_USERS=$(who)
然后,我们可以使用 echo 命令 显示一个句子并使用上述变量,如下:
$ echo -e "以下为登录到系统中的用户: $CURRENT_USERS"
上面的命令中:-e 标记表示解释所有的转义序列 (如 为换行)。为节约时间和内存,通常在 echo 命令 中直接使用命令置换特性,如下:
$ echo -e "以下为登录到系统中的用户: $(who)"

在 Linux 中显示当前登录系统的用户
接下来,为了演示上面提到的第二种形式,我们以把当前工作目录下文件数存储到变量 FILES ,然后使用 echo 来输出,如下:
$ FILES=`sudo find . -type f -print | wc -l` $ echo "当前目录有 $FILES 个文件。"

显示目中包含文件的数量
就是这些了。我们展示了将 shell 命令的输出赋值给变量的方法。你可以在下边的评论反馈区留下你的想法。 参考技术C @echo off
rem 开启延迟环境变量 如:!IP! 不用%IP%
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=: tokens=1,2*" %%a in ('ipconfig')do (
if "%%a" EQU " IPv4 地址 . . . . . . . . . . . . " (
set IP=%%b
echo IP4:!IP!
)
)
pause
:: 1. 用for语句把执行结果每行的数据赋值给变量%%a %%b,分割为 “:”
:: 2. 使用判断%%a的值是否为所取列
:: 3. 最后赋值IP变量并输出 参考技术D ipconfig|find "IPv4">ip.txt
(set/p a=)<ip.txt
set /i a=%a:*:=%
del ip.txt
感觉可能还能再简单些,不过这样已经够了
以上是关于bat批处理,定时执行删除某文件的主要内容,如果未能解决你的问题,请参考以下文章