批处理清理VMwareDnD

  • 分享一个自编的清理VMwareDnD简单批处理,仅在装有“Windows 终端”应用的操作系统上才能发挥所有功能

  • 其二目的是简单学习一下Windows中bat文件的编写方法

  • 设计的简单批处理要达到这几个目的:

    • 检查VMwareDnD是否存在

    • 检查VMwareDnD是否本身就是空的

    • VMwareDnD非空前提下,展示内容,但不要无关紧要的信息或者过多的信息(例如被复制的是文件夹,只展示文件夹本身而非其中内容)

    • 清空VMwareDnD文件夹并保留它自身

    • 展示内容同时提供可点击的路径链接,方便管理(此功能只能在通过“Windows 终端”应用启动批处理的时候有效,Windows 11默认就是用的“Windows 终端”应用)- -

  • 命令部分:

    • 新建文档,复制以下代码到其中(不急改后缀和文档名),务必继续往下看

      @echo off
      setlocal enabledelayedexpansion
      title 清理VMwareDnD目录
      
      ::targetDir
      set "targetDir=C:\Users\%username%\AppData\Local\Temp\vmware-%username%\VMwareDnD"
      ::设置VMwareDnD的路径,因当前Windows用户名不同而不同
      
      ::exist?
      if not exist "%targetDir%" (
          echo 目标目录不存在:
      	echo %targetDir%
      	echo.
          pause
      	exit
      ) else (
      	echo 目标目录为:(仅在“Windows 终端”应用中可按住ctrl并点击路径以跳转)
      	set targetDirTmp=!targetDir:\=/!
      	echo "file:///!targetDirTmp!"&&echo|set /p=
      )
      ::当VMwareDnD不存在时,也就是说明从未将文件或文件夹拖入或拖出客户机,或者被拖入或拖出的对象没有满足在VMwareDnD中转的规则
      ::,所以此处也无需提供跳转目标地址链接,提示用户目录不存在,按任意键退出
      ::相反的,目标地址存在,则提供跳转目标地址链接,对于链接,Windows中地址里的“\”需替换为“/”
      
      ::already empty?
      echo.
      dir /b "%targetDir%"|findstr .*>nul||(
      	echo 未找到任何内容,因为VMwareDnD里面是空的!
      	echo.
      	pause
      	exit
      )
      ::VMwareDnD是空的,打印提示信息,按任意键退出
      ::清理VMwareDnD目录批处理 -ByKAINEYLB 2025_07_21-11_59_33
      
      ::preview
      echo 文件列表:(从上到下时间递增)
      for /f %%i in ('dir "!targetDir!" /b /od') do (
      	set tempPath=!targetDir!\%%i
      	set tempPath=!tempPath:\=/!&&echo|set /p=
      	echo "file:///!tempPath!"&&echo|set /p=
      	dir "!tempPath!" /b /od
      )
      ::VMwareDnD有内容?那么按照从上到下的时间顺序展示这些文件(为什么从上到下呢?因为控制台执行命令结束后,光标是定位到最后的)
      ::这里展示文件用了for循环中嵌套dir命令的方法,因为如果用for /d %%i in ("<VMwareDnD的地址>\*")的话,遍历默认按照名称进行
      ::,若没猜错的话,VMwareDnD中的文件夹名称都是用产生的哈希值来命名的,用名称排序肯定不符合时间顺序
      
      ::confirm?
      echo.
      echo 确定清空VMwareDnD目录中的内容吗?(输入“y”或“Y”并回车来确认)
      set /p "ConfirmAns="
      if "%ConfirmAns%" equ "y" goto ExecuteCleanProgress
      if "%ConfirmAns%" equ "Y" goto ExecuteCleanProgress
      exit
      ::批处理应当避免打开即直接执行的问题,提示用户是否对整个VMwareDnD内容清空
      
      ::execute
      :ExecuteCleanProgress
      for /d %%i in ("%targetDir%\*") do rmdir /s /q "%%i"
      del /q /f "%targetDir%\*"
      ::遍历VMwareDnD中的所有文件夹,获取文件夹地址,利用rmdir命令对文件夹及其内容进行删除,这种删除是不经过回收站的
      ::正是由于rmdir这种会连目标文件夹自身都删除的命令,想保留VMwareDnD时就必须稍微复杂点,保留VMwareDnD目的也是为了判空
      
      ::done
      echo.
      echo 完成!
      timeout 2
      ::提示用户完成清理,延迟2秒自动关闭,个人觉得之前输入过“y”或“Y”,此处改为“按任意键继续”不妥
      
      
    • bat文件中的内容应当为ANSI编码类型的,否则会错误识别代码导致乱码。选择文档中的另存为,定位好路径后,输入CleanVMwareDnD.bat作为名称(名称其实随意),编码改为ANSI,保存
      Snipaste_2025-07-21_12-41-12

  • 效果:

    • 目录不存在:
      Snipaste_2025-07-21_12-01-53
    • 目录存在,但内容是空的(之前清理过?):
      Snipaste_2025-07-21_12-01-23
    • 目录中存在内容,简化展示具体内容并以其所在路径作为开头:
      Snipaste_2025-07-21_12-00-48
    • 输入“y”或“Y”后的提示信息:
      Snipaste_2025-07-21_12-01-07
  • 如果这个批处理可以帮到您的话,请给予回复让我知道这有意义(/▽\)

posted @ 2025-07-21 12:34  KAINEYLB  阅读(30)  评论(0)    收藏  举报