首页 > 解决方案 > 如何根据文件名移动文件?

问题描述

我正在尝试根据文件名将文件移动到现有的子文件夹中。

例如,我想将一个名为AP16742found in the directory的文件移动到名为 directoryX:\Files的文件夹APX:\Files\AP。其他名为MO14823我要移动到MO目录中的文件夹中的文件X:\Files\MO

我在编码方面缺乏经验,所以我需要解释来提供一个示例。

这是我尝试过的:

@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

标签: batch-file

解决方案


一个简单的解释是:

  • 您希望X:\Files使用文件名的前 2 个字母将文件分发到子文件夹中。
  • 要获取子字符串,您需要将 for 变量的内容设置为普通变量。
  • 在(代码块)内设置和使用变量需要延迟扩展。

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Pushd "X:\Files"

For %%A in (*) do (
  Set "File=%%~nA"
  if not exist "!File:~0,2!" md "!File:~0,2!" 2>&1>Nul
  Move "%%A" "!File:~0,2!"
)
Popd

如果您只想移动不同的 2 个字母对而不是所有文件,这也可以不费吹灰之力。


推荐阅读