批量移动文件到文件夹。文件夹根据文件名命名

Batch move files to folders. Folders are named based off of the filename

试图找到一只可以做到这一点的蝙蝠,但没有成功。由于我对批处理编码的了解非常有限,我不知道从哪里开始编辑类似的现有代码。

我的文件夹中有文件,如下所示:

    \NAS\ART34.pdf
    \NAS\ART35.ai
    \NAS\ART36.eps

我想将这些文件移动到服务器上的另一个文件夹中,文件夹结构如下:

\NAS\Art34\Original34.pdf
\NAS\Art35\Original35.ai
\NAS\Art36\Original36.eps

它将文件放入文件名文件夹的原始文件夹中。对不起,如果这令人困惑。

我发现这与我想要的很接近,但减去了字符的删除。

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (
 'dir /b /a-d "%sourcedir%\*.xml" '
 ) DO (
 FOR /f "tokens=1delims=_-" %%b IN ("%%a") DO (
  FOR /f "delims=" %%d IN (
  'dir /b /ad "%destdir%\*%%b*" '
  ) DO (
   ECHO(MOVE "%%a" "%destdir%\%%d\"
  )
 )
)

GOTO :EOF

您可以使用此批处理文件将 \NAS\ART\ 中的所有非隐藏文件移动到之前创建的合适子目录(如果不存在)并覆盖目标目录中具有相同名称的文件。

@echo off
for %%I in ("\NAS\ART\*") do (
    if not "%%I" == "%~f0" (
        md "%%~dpnI\Original" 2>nul
        move /Y "%%I" "%%~dpnI\Original\"
    )
)

IF 条件避免移动批处理文件也存储在目录 \NAS\ART\ 中,如果肯定不会发生这种情况,则可以将其删除。

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • if /?
  • md /?
  • move /?

另请阅读有关 Using Command Redirection Operators 的 Microsoft 文章,了解 2>nul 的解释,该文章用于抑制命令 MD 输出的错误消息以处理 STDERR 在要创建的目录上,方法是将此错误消息重定向到设备 NUL