0

对于 .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命令来移动文件,但似乎没有任何效果。

任何意见是极大的赞赏。谢谢你。

4

1 回答 1

0
@echo OFF
SETLOCAL
for /f "delims=_" %%i in ('dir /b /a-d *_*.xlsx') do (
 mkdir "%%i" 2>nul
 move "%%i_*.xlsx" "%%i" >NUL 2>nul
)
echo Did it work?

GOTO :EOF

可能会工作并且更容易。

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

于 2014-11-13T22:19:56.800 回答