问:批处理文件在名称中的分隔符之前根据字符移动文件

时间:2014-11-13 21:08:14

标签: batch-file batch-processing delimiter file-move

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

非常感谢任何建议。谢谢。

1 个答案:

答案 0 :(得分: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格式。