使用Robocopy从文件名的一部分创建子文件夹名称并复制文件

时间:2013-07-22 18:37:43

标签: windows batch-file cmd robocopy

使用Robocopy从文件名子串中自动复制和制作目录是否可行?

我的意思是我有这样的文件。 LAJ00306130201004626.rc 前8个字符控制号LAJ00306 =控制号)这将是文件夹的名称,其余的是日期和时间(日期= 130201)(时间= 004626)。

LAJ00306130201004626.rc
LAJ00306130202004626.rc
LAJ00306130203004626.rc
LAJ00307130201004626.rc
LAJ00307130202004626.rc

我想从文件名中复制和创建文件夹,如下所示,并在新文件夹中复制之前提到的文件。

LAJ00306
LAJ00307

我希望在必要时明确要求我提供更多信息

3 个答案:

答案 0 :(得分:2)

尝试此操作,查看输出并删除echoMD之前的ROBOCOPY,如果它看起来不错:

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcefolder=."
SET "targetfolder=X:\data"

CD /d "%sourcefolder%"
FOR %%a IN (*.rc) DO (
    SET "fname=%%a"
    SET "folder=!fname:~0,8!"
    SET "$!folder!=1"
)

FOR /f "delims=$=" %%a IN ('set "$"') DO (
    ECHO MD "%targetfolder%\%%a" 2>nul
    ECHO ROBOCOPY "%sourcefolder%" "%targetfolder%\%%a" "%%a*.rc"
)

为您的文件夹树设置sourcefoldertargetfolder

答案 1 :(得分:1)

试试这个:

@echo off
pushd "c:\source folder"
setlocal enabledelayedexpansion
for %%a in (*.rc) do (
    set "name=%%a"
    robocopy "%cd%" "%%a" "D:\target directory\!name:~0,8!" 
)
popd

您的问题的答案是:

pushd "drive:\path"使该位置成为当前工作目录 popd恢复最后一个工作目录
setlocal enabledelayedexpansion允许您使用!变量更改和使用循环中的变量!语法。

如果您的2000个文件位于单个文件夹中,那么它应该可以工作 - 但首先在一些示例文件上测试它,以便您可以看到它是如何工作的。

答案 2 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=."
SET "destdir=c:\destdir"
FOR /f "tokens=1*delims=_" %%i IN (
 'dir /b /a-d "%sourcedir%\*_*."'
) DO XCOPY /b "%sourcedir%\%%i_%%j" "%destdir%\%%i\"
GOTO :EOF

这应该完成描述的任务。当然,您需要设置源目录和目标目录。将>nul添加到XCOPY行的末尾以禁止“复制”消息。