Batch file Q:批处理文件,根据名称中分隔符之前的字符移动文件

Batch file Q:批处理文件,根据名称中分隔符之前的字符移动文件,batch-file,batch-processing,delimiter,file-move,Batch File,Batch Processing,Delimiter,File Move,对于.BAT文件,我是个新手。请,我需要一个批处理文件,该文件将根据本地文件夹中文件的名称创建文件夹,然后将这些文件移动到相应的文件夹中。文件夹名称需要由文件名中分隔符之前的字符确定,在本例中为下划线 例如,它需要这些文件 june_jahdfjlkaluie2.xlsx june_jahdfjlkaluie.xlsx august_nnnvbcnkziery2.xlsx august_nnnvbcnkziery.xlsx december_bagjd_kasdgf.xlsx

对于.BAT文件,我是个新手。请,我需要一个批处理文件,该文件将根据本地文件夹中文件的名称创建文件夹,然后将这些文件移动到相应的文件夹中。文件夹名称需要由文件名中分隔符之前的字符确定,在本例中为下划线

例如,它需要这些文件

june_jahdfjlkaluie2.xlsx  
june_jahdfjlkaluie.xlsx  
august_nnnvbcnkziery2.xlsx  
august_nnnvbcnkziery.xlsx  
december_bagjd_kasdgf.xlsx  
december_byuueyiuyoi.xlsx  
创建这些文件夹

june  
august  
december
并根据下划线前的字符将文件移动到这些文件夹中

这是我目前掌握的代码

@echo off &setlocal
for /f "delims=_" %%i in ('dir /b /a-d *.xls') do (
set "file=%%~i"
setlocal enabledelayedexpansion
set "folder=!file!"
mkdir "!folder!" 2>nul
move "!file!" "!folder!" >nul
)
endlocal
echo Did it work?
Pause
批处理文件能够根据文件名创建文件夹。但是,当它尝试移动文件时,会产生一个错误,说明“该进程无法访问该文件,因为它正被另一个进程使用。”我尝试了几次修复,包括创建一个单独的
for
命令来移动文件,但似乎没有任何效果

非常感谢您的建议。多谢各位

@echo关闭
SETLOCAL
对于('dir/b/a-d*.*.xlsx')中的/f“delims=%%i(
mkdir“%%i”2>nul
移动“%%i.*.xlsx”“%%i”>NUL 2>NUL
)
它起作用了吗?
后藤:EOF
可能会更有效,也更容易


请注意,我已将目标文件掩码更改为
…;。xlsX
因为
.xslx
文件的短文件名不一定保留
*.\u*.xls
格式。

太棒了!这也正是我所需要的。非常感谢你。