Batch file 如何根据文件名移动文件?

Batch file 如何根据文件名移动文件?,batch-file,Batch File,我正在尝试根据文件名将文件移动到现有子文件夹中 例如,我想将目录X:\Files中名为AP16742的文件移动到目录X:\Files\AP中名为AP的文件夹中。名为MO14823的其他文件我想移动到目录X:\files\MO中名为MO的文件夹中 我在编码方面缺乏经验,所以我需要解释以配合提供的示例 这就是我所尝试的: @ECHO OFF SETLOCAL SET "sourcedir=U:\sourcedir" SET "destdir=U:\destdir" FOR /f "delims=

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

例如,我想将目录
X:\Files
中名为
AP16742
的文件移动到目录
X:\Files\AP
中名为
AP
的文件夹中。名为
MO14823的其他文件
我想移动到目录
X:\files\MO
中名为
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

一个简单的解释是:

  • 您想将
    X:\files
    中的文件分发到具有 文件名的前两个字母
  • 要获取子字符串,需要将for变量的内容设置为 正态变量
  • 在(代码块)内设置和使用变量需要延迟 扩张


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

对LotPings答案的修改,使用
RoboCopy
及其
/MOV
选项,将根据需要创建目录并将文件移动到其中:

@Echo Off&SetLocal EnableDelayedExpansion
CD/D“X:\Files”2>Nul | |退出/B
对于(*)中的%%A,请执行(设置“文件=%%~nA”
机器人复制。“!文件:~,2!”“%%A”/MOV>Nul)

到目前为止您尝试了什么?我想您是指移动还是复制?在Windows中有一个实际的排序命令,但它通过告诉文件要开始排序的位置来对文件进行物理排序。我看到了许多类似的脚本,但不确定应该在哪里编辑。我在编码方面是一个新手,希望变得不那么无知。比如:@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”标记=1delims=“%%b IN”(%%a”)DO(FOR/f“delims=”%%d IN('dir/b/ad”%destdir%*%b*))DO(ECHO(移动“%%a”“%destdir%\%%d\”)转到:EOF,但不确定在何处执行我的changes@MSR76下一次提问时,请确保问题本身包含代码/其他信息。
@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