我正在尝试在 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"
...
其他资源: