2017-09-14 253 views
0

我目前正在制作一个用于删除多个用户下载的批处理文件。例如(ccomley.V2),我被困在获取扩展名的文件夹中。如何删除带扩展名的多个文件夹? (BATCH FILE)

大约有172个配置文件,我知道我可以在不同的命令行中完成它们,但有没有更简单的方法让它们在一行中删除?

当前行的批处理文件,

color 2 
del "C:\logs\student_deletion.log" 
cls 
@echo off 
@setlocal 

set start=%time% 

:: Runs your command 
cmd /c %* 

set end=%time% 
set options="tokens=1-4 delims=:.," 
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100 
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100 

set /a hours=%end_h%-%start_h% 
set /a mins=%end_m%-%start_m% 
set /a secs=%end_s%-%start_s% 
set /a ms=%end_ms%-%start_ms% 
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms% 
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs% 
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins% 
if %hours% lss 0 set /a hours = 24%hours% 
if 1%ms% lss 100 set ms=0%ms% 

:: Mission accomplished 
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs% 

cd /d "c:\users" 
echo Date: %date% Time: %time% >> C:\logs\student_deletion.log 
echo. >> C:\logs\student_deletion.log 

dir \\SRV-FILES01\IJ_StudentsW$\Profiles\ccomley.V2\downloads >> C:\logs\student_deletion.log 
for /d %%a in (*) do rd /s /q "\\SRV-FILES01\IJ_StudentsW$\Profiles\ccomley.V2\downloads" >>nul 2>>&1 
@echo Successfully deleted ccomley downloads! (%totalsecs%.%ms%s total) to delete their downloads 
echo ccomley took, (%totalsecs%.%ms%s total) to delete their downloads >> C:\logs\student_deletion.log 
echo. >> C:\logs\student_deletion.log 

dir \\SRV-FILES01\IJ_StudentsW$\Profiles\anotheraccount.V2\downloads >> C:\logs\student_deletion.log 
for /d %%a in (*) do rd /s /q "\\SRV-FILES01\IJ_StudentsW$\Profiles\anotheraccount.V2\downloads" >>nul 2>>&1 
@echo Successfully deleted anotheraccount downloads! (%totalsecs%.%ms%s total) to delete their downloads 
echo anotheraccount took, (%totalsecs%.%ms%s total) to delete their downloads >> C:\logs\student_deletion.log 
echo. >> C:\logs\student_deletion.log 

希望你能帮帮我! (附注。我曾尝试做*,

(无法显示它在有私人信息的整批文件。)

回答

0
dir \\SRV-FILES01\IJ_StudentsW$\Profiles\ccomley.V2\downloads >> C:\logs\student_deletion.log 
for /d %%a in (*) do rd /s /q "\\SRV-FILES01\IJ_StudentsW$\Profiles\ccomley.V2\downloads" >>nul 2>>&1 
@echo Successfully deleted ccomley downloads! (%totalsecs%.%ms%s total) to delete their downloads 
echo ccomley took, (%totalsecs%.%ms%s total) to delete their downloads >> C:\logs\student_deletion.log 
echo. >> C:\logs\student_deletion.log 

此块需要被重复运行,用固定文本ccomley[.v2]替换为一个变量。

简单的方法是将call作为子程序,将所需的名称作为参数传递。

:sub 
setlocal 
set "name=%%~n1"&set "ext=%%~x1" 
:: if no ext, abandon ship. 
if not defined ext goto :eof 
:: otherwise, execute the block with `%~1`, `%name%` and `%ext%' as required. 

这可能是一个内部的子程序,或者最好是独立的批次,这样就可以执行zap1user fred.bloggs删除用户fred.bloggs的文件。

下一步是在子程序中包含时间。在setlocal之后,设置start,并在for...rd...设置end之后,然后执行计算以生成报告字段。请注意,由于子过程中的setlocal而不是会影响主程序中的startend次。

末,只需使用for /d\\SRV-FILES01\IJ_StudentsW$\Profiles目录下生成要删除的名称,并通过call

for /d %%x in ("\\SRV-FILES01\IJ_StudentsW$\Profiles\*") do call zap1user "%%x" 

,并全部完成传递这些名字的子程序!

(当然 - 你也可以将你的经过时间程序变成另一个辅助批次,它提供两个参数,开始和结束时间,并计算经过时间,毫无疑问它会在别处有用......)

+0

谢谢,没意识到它会那么简单! –

相关问题