如何使批处理脚本仅从文件名中的数字创建文件夹

时间:2013-12-12 15:08:06

标签: batch-file replace filenames move digits

我正在尝试在Windows 7上创建一个批处理脚本来执行以下操作:

我有一个文件夹,其他程序将文件转储到。 所有文件的名称中都有数字以及其他识别信息。 我想让批处理脚本搜索文件名中的所有数字,然后创建一个文件夹(文件夹名称只是数字)并将包含这些数字的所有文件移动到该文件夹​​。 它必须适用于我办公室的众多用户。

目前我有一个非常糟糕的原始系统运行,但没有解决错误:

@echo off 

setlocal enabledelayedexpansion

pushd "%USERPROFILE%\Desktop\RawFiles"

for %%a in (*) do (

  set fldr=%%~na

  set fldr=!fldr:~0,5!

  md "!fldr!"

  move "%%a" "!fldr!"

)

popd


 if not exist "%USERPROFILE%\Dropbox\agents" mkdir "%USERPROFILE%\Dropbox\agents"

 SET "src_folder=%USERPROFILE%\Desktop\RawFiles"

 SET "tar_folder=%USERPROFILE%\Dropbox\agents"

 for /f %%a IN ('dir "%src_folder%" /b') do move /-y %src_folder%\%%a %tar_folder%


exit

the files in the "rawfiles" folder are as follows:

12345 - tech pack.pdf

12345.pdf

12345-artwork.AI

"#12345- artwork.AI"

我创建的内容仅适用于数字在文件中排在第一位且完全为5的完美实例。 不幸的是,这里存在很多人为错误,因此这种解决方案不可行。 错误的一个例子是偶然的6位数字,甚至在数字前加上“#”符号

我还希望能够通过运行两次来覆盖目标文件夹中的文件,但是我得到了“拒绝访问”。

请帮忙!

谢谢

1 个答案:

答案 0 :(得分:1)

下面的批处理文件从请求中提取文件名中的数字(最多6组数字由其他字符分隔,这可能会被修改),因此您可以以任何方式操纵它们; ECHO命令只是示例。请注意,空格必须是eliminate变量中的最后一个字符。

@echo off
setlocal EnableDelayedExpansion

set "eliminate=#-abcdefghijklmnopqrstuvwxyz "

for %%a in (*.*) do (
   for /F "tokens=1-6 delims=%eliminate%" %%b in ("%%~Na") do set folder=%%b%%c%%d%%e%%f%%g
   if not exist "!folder!" ECHO md "!folder!"
   ECHO move "%%a" "!folder!"
)