tsyhome 发表于 2023-11-15 11:04

批处理:一键创建文件夹并移动文件

琢磨了很久,终于写成了一个批处理脚本,发帖上来分享给大家,初次发这类帖子,高手勿笑,如违规请管理员删除!

批处理功能:一键创建与“主文件名”名称相同的文件夹,并将当前文件夹中“主文件名”相同的文件移到新创建的文件夹中。

@echo off
setlocal enabledelayedexpansion

set "filename=%~1"
set "foldername=%filename:~0,-4%"

mkdir "%foldername%" 2>nul

move "%foldername%".* "%foldername%\
)   

echo 文件夹已创建并文件已移动。

使用方法:将上述代码保存为批处理文件(例如,create_folder.bat),然后将其放置在您希望使用的文件夹中。
使用时,只需将文件直接拖到批处理文件上(如果有多个主文件名相同的文件需要移动,只拖动其中任意一个即可)。脚本将自动根据文件的主文件名创建一个同名文件夹(不包括扩展名),并将当前文件夹中主文件名相同(扩展名不同)的所有文件移动到新建的文件夹中,如果该文件夹已经存在,脚本将不会覆盖它。

1045837055lucy 发表于 2023-11-15 15:44

能不能文件名模糊查找文件移动,比如文件夹里有A,AB、CAB文件,创建A文件夹,把这三个文件都移动到A文件夹下。

wkdxz 发表于 2023-11-15 15:47

帮顶一个,使用字符分割来获取文件名的话,后缀名长度<>3会出错,可以使用%%~nF和%%~xF来获取文件名和后缀,就简单多了。

setlocal enabledelayedexpansion

set "filename=%~1"
for %%F in ("%filename%") do (
    set "foldername=%%~nF"
    set "extension=%%~xF"
)


@echo off
setlocal enabledelayedexpansion

set "filename=%~1"
for %%F in ("%filename%") do (
    set "foldername=%%~nF"
    set "extension=%%~xF"
)

if "%extension%"=="" (
    mkdir "!foldername!" 2>nul
    move "!foldername%!extension!" "!foldername!"
) else (
    mkdir "!foldername!" 2>nul
    move "!foldername!.*" "!foldername!"
)

echo 文件夹已创建并文件已移动。

lgqllw 发表于 2023-11-15 15:49

测试了一下,不移动啊,能建立文件夹

474663216 发表于 2023-11-15 16:43

有没有详细一点的教程{:1_937:}

tsyhome 发表于 2023-11-15 17:23

1045837055lucy 发表于 2023-11-15 15:44
能不能文件名模糊查找文件移动,比如文件夹里有A,AB、CAB文件,创建A文件夹,把这三个文件都移动到A文件夹 ...

这个用批处理处理起来比较难,我的水平做不了!

tsyhome 发表于 2023-11-15 17:25

wkdxz 发表于 2023-11-15 15:47
帮顶一个,使用字符分割来获取文件名的话,后缀名长度3会出错,可以使用%%~nF和%%~xF来获取文件名和后缀, ...

多谢指导,学到了!

tsyhome 发表于 2023-11-15 17:28

474663216 发表于 2023-11-15 16:43
有没有详细一点的教程

看3楼的回帖,我也在学习。

Batcher 发表于 2023-11-15 18:35

1045837055lucy 发表于 2023-11-15 15:44
能不能文件名模糊查找文件移动,比如文件夹里有A,AB、CAB文件,创建A文件夹,把这三个文件都移动到A文件夹 ...

文件名模糊查找文件移动.bat
@echo off
cd /d "%~dp0"
set "Key=A"
if not exist "%Key%\" (
    md "%Key%"
)
for /f "delims=" %%i in ('dir /b /a-d') do (
    if not "%%i" == "%~nx0" (
      set "FileName=%%i"
      setlocal enabledelayedexpansion
      if not "!FileName!" == "!FileName:%Key%=!" (
            echo "!FileName!" ---^> "%Key%\"
            move "!FileName!" "%Key%\" >nul
      )
      endlocal
    )
)
pause

Batcher 发表于 2023-11-15 18:47

稍微优化一下顶楼的代码:一键创建文件夹并移动文件.bat
@echo off
if "%~1" == "" (
    echo 请关闭当前窗口,拖放主文件到bat文件上。
    exit /b
)
set "FileName=%~n1"
set "FolderName=%~n1"
md "%FolderName%" 2>nul
move "%FileName%.*" "%FolderName%\"
页: [1] 2
查看完整版本: 批处理:一键创建文件夹并移动文件