无忧启动论坛

标题: 有请批处理大佬 [打印本页]

作者: newyun    时间: 昨天 17:23
标题: 有请批处理大佬
帮我写个批处理删除C盘除了C:\Windows C:\Program Files (x86) C:\Program Files C:\ProgramData这4个文件夹以外其它所有文件夹的*.xls *.xlsm *.xlsx *.xlsb这4种文件,要注意的是排除的4个夹是包含空格的请用引号,这个用gpt4写了一下午,期间改了好多次就是没一次能实现效果的

作者: YWFhYmJi    时间: 昨天 18:47
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set dirs=
  4. for /f "tokens=*" %%i in ('dir /ad /b C:\') do (
  5.     set flag=0
  6.     if "%%~i"=="Windows" set flag=1
  7.     if "%%~i"=="Program Files (x86)" set flag=1
  8.     if "%%~i"=="Program Files" set flag=1
  9.     if "%%~i"=="ProgramData" set flag=1
  10.     if "!flag!"=="0" set "dirs=!dirs! "C:\%%i\*.xls" "C:\%%i\*.xlsm" "C:\%%i\*.xlsx" "C:\%%i\*.xlsb""
  11. )
  12. for /f "tokens=*" %%i in ('dir /a-d /s /b %dirs%') do (
  13.     ::echo %%i
  14.     del /f /a /q "%%~i"
  15. )
复制代码

作者: yyz2191958    时间: 昨天 18:59
YWFhYmJi 发表于 2025-1-10 18:47

助人为乐
作者: lsbdx    时间: 昨天 19:22
论坛的大佬比GPT4厉害!
作者: vaf    时间: 昨天 19:36
用 Robocopy.exe 可以轻松实现.
Robocopy.exe /? 琢磨琢磨.

作者: 窄口牛    时间: 昨天 19:38
那四个里有可能有这四种文件吗吗?你这要求就有点说不来的感觉。
作者: pole87898843    时间: 昨天 19:39
感谢分享
作者: chanriy    时间: 昨天 20:14
还可以提要求吗
作者: BEIKING    时间: 昨天 21:12
  1. @echo off
  2. for /f "delims=" %%i in ('dir C: /a:d /b') do if "%%~i" neq "Program Files" if "%%~i" neq "Program Files (x86)" if "%%~i" neq "ProgramData" if "%%~i" neq "Windows" cd /d "C:\%%~i" 2>nul&for /f "delims=" %%j in ('dir /a-d /s /b "*.xls" "*.xlsm" "*.xlsx" "*.xlsb" 2^>nul') do echo "%%~j"&del /f /q "%%~j"
复制代码
管理员权限执行

作者: pengfangzhi    时间: 昨天 21:27
  1. 要编写一个批处理脚本来删除C盘中除了指定的四个文件夹以外的所有`.xls`、`.xlsm`、`.xlsx`和`.xlsb`文件,首先,我们需要确保:

  2. 1. 排除的四个文件夹:`C:\Windows`、`C:\Program Files (x86)`、`C:\Program Files`、`C:\ProgramData`;
  3. 2. 只删除C盘根目录下其他文件夹中的目标文件类型;
  4. 3. 正确处理文件夹和路径中有空格的情况。

  5. 可以使用`for /d`和`del`命令来遍历和删除文件。以下是一个简单的批处理脚本实现:

  6. ```batch
  7. @echo off
  8. setlocal

  9. :: 设置排除的文件夹路径
  10. set exclude1="C:\Windows"
  11. set exclude2="C:\Program Files (x86)"
  12. set exclude3="C:\Program Files"
  13. set exclude4="C:\ProgramData"

  14. :: 遍历 C 盘上的所有文件夹
  15. for /d %%F in (C:\*) do (
  16.     if /i not "%%F"==%exclude1% (
  17.         if /i not "%%F"==%exclude2% (
  18.             if /i not "%%F"==%exclude3% (
  19.                 if /i not "%%F"==%exclude4% (
  20.                     :: 删除该文件夹内的目标文件
  21.                     del /q "%%F\*.xls" "%%F\*.xlsm" "%%F\*.xlsx" "%%F\*.xlsb" 2>nul
  22.                 )
  23.             )
  24.         )
  25.     )
  26. )

  27. echo 删除完成
  28. endlocal
  29. pause
  30. ```

  31. ### 说明:
  32. 1. **排除文件夹:** 我们使用 `if /i not "%%F"==%excludeX%` 来检查每个文件夹是否是要排除的文件夹,`/i` 参数确保忽略大小写。
  33. 2. **删除操作:** `del /q "%%F\*.ext"` 用来删除每个文件夹中的`.xls`、`.xlsm`、`.xlsx`和`.xlsb`文件。`2>nul` 用于将删除过程中的错误(如文件夹中没有符合条件的文件)输出重定向到空设备,以避免显示错误消息。
  34. 3. **批处理命令 `pause`**:用来在批处理脚本结束时暂停,方便你查看是否有任何错误消息。

  35. ### 使用方法:
  36. 1. 将此批处理脚本保存为 `.bat` 文件。
  37. 2. 以管理员身份运行批处理脚本,以确保有权限删除文件。

  38. ### 注意:
  39. - 请在使用此脚本前,**备份重要数据**,以免误删重要文件。
  40. - 如果脚本运行时没有删除所有的目标文件,可能是因为没有对某些文件夹有权限,或者文件夹中没有符合条件的文件。

  41. 希望这个脚本能够帮助你完成任务!
复制代码

作者: newswan    时间: 昨天 23:53
AI
  1. $excludedFolders = "C:\Windows*","C:\Program Files (x86)*","C:\Program Files*","C:\ProgramData*"
  2. $folders = Get-ChildItem -Path C:\ -Directory -ErrorAction SilentlyContinue | Where-Object {$_.FullName -notmatch ($excludedFolders -join "|")}

  3. $excelFiles = foreach ($folder in $folders) {
  4.     Get-ChildItem -Path $folder.FullName -Include *.xls,*.xlsm,*.xlsx,*.xlsb -ErrorAction SilentlyContinue
  5. }

  6. # 输出结果
  7. if ($excelFiles) {
  8.     $excelFiles | Select-Object FullName
  9. } else {
  10.     Write-Host "未找到任何Excel文件。"
  11. }
复制代码





欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3