[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理怎样遍历并且删除每个用户文件夹下指定格式文件?

大家好, 小弟学艺不精.. 有如下需求请大侠帮忙.

需求: 在多用户登录的电脑上, 能删除Win7每个用户文件夹下的缓存文件.  以下是我写的代码, 遇到错误, 请大家指正. 谢谢

#1, 脚本需要遍历 C:\users\   
#2, 判断 C:\Users\xxxx\AppData\Local\Microsoft\outlook\ 文件夹下是否存在 outlook.ost 和 *.pst文件.
#3, 如果存在, 并且删除掉.
#4, 再循环 判断和删除下一个用户文件夹的 邮件缓存文件.
#5, 对删除成功的文件记录到文本日志文件.
  1. @echo off
  2. ::枚举用户文件夹名字写入list.txt
  3. dir /ad /b c:\users > list.txt
  4. Set RootFolder = C:\Users\
  5. Set SubFolder = \AppData\Local\Microsoft\Outlook\
  6. echo %RootFolder%
  7. echo %SubFolder%
  8. ::读取list.txt 连接成绝对路径
  9. for /f %%i in (list.txt) do (
  10. echo %RootFolder% & %%i &  %SubFolder%
  11. :: 连接成为绝对路径, (路径显示不正确.)
  12. Set MyPath = %RootFolder% & %%i & %SubFolder%
  13. ::判断路径是否存在, 如果存在就做删除操作.
  14. if exist %MyPth% (del /s /f %MyPath%outlook.ost)
  15. )
  16. PAUSE
复制代码
运行结果:

ECHO is off.
ECHO is off.
The syntax of the command is incorrect.

把等号两边的空格全部删掉

TOP

回复 2# find


    谢谢Find..   但是执行结果还是不对.  可能是路径连接的地方有问题. 我把变量 这样写echo %RootFolder%&%%i&%SubFolder%, 还是不对... 请指教

list.txt 文件内容是:
All Users
Default
Default User
admin
Public

命令行执行结果如下:

C:\Users\
\AppData\Local\Microsoft\Outlook\
C:\Users\
'All' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.
'All' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.
C:\Users\
'Default' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.
'Default' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.
C:\Users\
'Default' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.
'Default' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.
C:\Users\
'admin' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.
C:\Users\
'Public' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.
'Public' is not recognized as an internal or external command,operable program or batch file.
'\AppData\Local\Microsoft\Outlook\' is not recognized as an internal or external command,operable program or batch file.

TOP

回复 3# ppappa2001


连接的时候不需要使用&符号

TOP

本帖最后由 ppappa2001 于 2012-2-16 23:30 编辑

去掉过后, 路径对了..


但是在判断文件是否存在时候,  删除动作没执行. 也没报错..

C:\Users\
\AppData\Local\Microsoft\Outlook\
C:\Users\All\AppData\Local\Microsoft\Outlook\
C:\Users\Default\AppData\Local\Microsoft\Outlook\
C:\Users\Default\AppData\Local\Microsoft\Outlook\
C:\Users\admin\AppData\Local\Microsoft\Outlook\
C:\Users\Public\AppData\Local\Microsoft\Outlook\

修改以后的代码如下:
  1. @echo off
  2. ::枚举用户文件夹名字写入list.txt
  3. dir /ad /b c:\users > list.txt
  4. Set RootFolder=C:\Users\
  5. Set SubFolder=\AppData\Local\Microsoft\Outlook\
  6. echo %RootFolder%
  7. echo %SubFolder%
  8. ::读取list.txt 连接成绝对路径
  9. for /f %%i in (list.txt) do (
  10. echo %RootFolder%%%i%SubFolder%
  11. :: 连接成为绝对路径, (路径显示不正确.)
  12. Set MyPath = %RootFolder%%%i%SubFolder%
  13. ::判断路径是否存在, 如果存在就做删除操作.
  14. if exist %MyPth% (del /s /f %MyPath%outlook.ost)
  15. )
  16. PAUSE
复制代码

TOP

回复 5# ppappa2001


等号两边的空格还没有删完

TOP

回复 6# find

重新改过了.
  1.     @echo off
  2. ::枚举用户文件夹名字写入list.txt
  3. dir /ad /b c:\users > list.txt
  4. Set RootFolder=C:\Users\
  5. Set SubFolder=\AppData\Local\Microsoft\Outlook\
  6. echo %RootFolder%
  7. echo %SubFolder%
  8. ::读取list.txt 连接成绝对路径
  9. for /f %%i in (list.txt) do (
  10. echo %RootFolder%%%i%SubFolder%
  11. :: 连接成为绝对路径, (路径正确如: C:\Users\Default\AppData\Local\Microsoft\Outlook\)
  12. Set MyPath=%RootFolder%%%i%SubFolder%
  13. echo %MyPath%outlook.ost
  14. echo ..
  15. ::判断路径是否存在, 如果存在就做删除操作.
  16. if exist %MyPath%outlook.ost (del /s /f %MyPath%outlook.ost)
复制代码
结果:

C:\Users\
\AppData\Local\Microsoft\Outlook\
C:\Users\All\AppData\Local\Microsoft\Outlook\
C:\Users\Public\AppData\Local\Microsoft\Outlook\outlook.ost
..
C:\Users\Default\AppData\Local\Microsoft\Outlook\
C:\Users\Public\AppData\Local\Microsoft\Outlook\outlook.ost
..
C:\Users\Default\AppData\Local\Microsoft\Outlook\
C:\Users\Public\AppData\Local\Microsoft\Outlook\outlook.ost
..
C:\Users\admin\AppData\Local\Microsoft\Outlook\
C:\Users\Public\AppData\Local\Microsoft\Outlook\outlook.ost
..
C:\Users\Public\AppData\Local\Microsoft\Outlook\
C:\Users\Public\AppData\Local\Microsoft\Outlook\outlook.ost

TOP

文件还是没删掉....

TOP

而且很纳闷, 为啥第19行输出的 都变成了 Public

C:\Users\Public\AppData\Local\Microsoft\Outlook\outlook.ost

TOP

回复 7# ppappa2001


for /f "delims=" %%i in (list.txt) do (

TOP

改了还是一样的结果喃?

TOP

  1. @echo off
  2. set RootFolder=C:\Users
  3. set SubFolder=AppData\Local\Microsoft\Outlook
  4. for /f "delims=" %%i in ('dir /ad /b C:\users') do (
  5.     echo %RootFolder%\%%i\%SubFolder%\outlook.ost
  6.     if exist "%RootFolder%\%%i\%SubFolder%\outlook.ost" (
  7.         del /f /q "%RootFolder%\%%i\%SubFolder%\outlook.ost"
  8.     )
  9. )
复制代码
1

评分人数

TOP

完美   多谢find

TOP

本帖最后由 ppappa2001 于 2012-2-17 00:12 编辑

回复 12# find

我把文件名字改成了通配符格式.
  1. @echo off
  2. set RootFolder=C:\Users
  3. set SubFolder=AppData\Local\Microsoft\Outlook
  4. for /f "delims=" %%i in ('dir /ad /b C:\users') do (
  5. REM  echo %RootFolder%\%%i\%SubFolder%\*.ost
  6.     if exist "%RootFolder%\%%i\%SubFolder%\*.ost" (
  7.         dir /b %RootFolder%\%%i\%SubFolder%\*.ost>>Delete.log
  8.         del /f /q "%RootFolder%\%%i\%SubFolder%\*.ost"
  9.     )
  10. )
复制代码
能不能在第12行的 删除操作之前, 把删除的文件路径写入日志文件喃?

我增加了删除之前枚举文件的命令. 如果删除成功, 那么删掉的文件就是被枚举的文件. 但是如果进程被占用, 那么文件并没有被删除, 而文件名还是被写入日志, 就不符合实际..  有啥办法只把删掉的文件写入日志..??

TOP

你的思路本来就有问题。

TOP

返回列表