如何在 Windows 上根据文件扩展名对文件进行排序和移动

如何在 Windows 上根据文件扩展名对文件进行排序和移动

我正在尝试在 Windows 中根据文件的扩展名对文件进行排序和移动,并遵循此教程使用:

@echo off
    
for %%a in (".\*") do (
  if "%%~xa" NEQ "" if "%%~dpxa" NEQ "%~dpx0" (
    if not exist "%%~xa" mkdir "%%~xa" (
      move "%%a" "%%~dpa%%~xa\"
    )
  )
)
  • 我将.txt文件转换为.bat文件,但是当我双击打开批处理文件时,它没有任何反应;当我尝试以管理员身份运行它时,它确实打开了,但我收到拒绝访问错误

我按照确切的步骤操作,是不是做错了什么?

答案1

@echo off && cd /d "%~dp0"

for /f delims^= %%a in =;('where .:*.* ^| find /v /i "%~0"'
  )do 2>nul =;( mkdir "%%~xa" & move "%%a" "%%~dpa%%~xa\" );=

我按照确切的步骤操作,是不是做错了什么?

  • 您正在使用据称为作者服务的解决方案。

选择尝试更具体的方法:

1.列出包含扩展名且已排除 bat 的文件,usindwhere仅列出以下文件包含 .eXtensions. 它遵循搜索过滤器全部文件+所有扩展.并使用withfind /v /i "%~0"来排除你的蝙蝠被列出。

where .:*.* ^| find /v /i "%~0"

2. NEQ用于if 1 NEQ 2 ()INTEGER 之间的条件操作数比较,而不是字符串。

if "%%~xa" NEQ "" if "%%~dpxa" NEQ "%~dpx0" (
... 

3.直接执行创建文件夹的操作,如果存在则忽略警告,不会对其余执行产生任何影响,甚至不会中断当前循环

 2>nul =;( mkdir "%%~xa" & move "%%a" "%%~dpa%%~xa\" );=

观察1:当尝试打开一个已经存在的文件夹时,系统仅返回一个简单的警告“该文件夹已存在”,并且继续而不中断 bat 的执行。

2>nul mkdir "already exists"

观察2:使用cd /d "%~dp0"因为文件和 bat 应该在同一个文件夹中,否则编辑并替换"%~dp0"使用合格路径:

@echo off && cd /d "D:\The\Full\Path\To\Your\Folder"
...

其他资源:

相关内容