如何在文件名中的前4个字符后复制具有不同编号的文件?

时间:2017-04-24 02:39:25

标签: batch-file

我需要一个批处理文件,在运行时会查看Program Files (86)中的特定文件夹,然后将该文件复制并粘贴到另一个文件夹中。现在我已经知道了这个网站的代码。

这是我的困境:文件从计算机变为计算机。我知道前4个字母是xxxx,然后是未知数量的数字。

我可以创建一个可以查找文件名开头的.bat文件吗?

2 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (
 'dir /b /a-d "%sourcedir%\abcd*" '
 ) DO (
 SET "name=%%~na"
 SET "name=9!name:~4!"
 FOR /L %%z IN (0,1,9) DO SET "name=!name:%%z=!"
 IF NOT DEFINED name ECHO(COPY "%sourcedir%\%%a" "%destdir%\"
)

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

为了测试目的,所需的COPY命令仅为ECHO在您确认命令正确后,将ECHO(COPY更改为COPY以实际复制文件。附加>nul以取消报告消息(例如1 file copied

设置delayedexpansion模式后,在/b基本模式/a-d中执行源目录的目录扫描,不带目录,并将找到的每个文件名分配给%%a

仅在name的名称部分设置%%a,然后删除前4个字符并在修改后的名称中加入9

然后从结果中删除所有09,如果name变空,请执行复制。请注意,添加了9,以便字符串namefor /L循环的最后一次迭代之前保持非空。

答案 1 :(得分:0)

@echo off
pushd "c:\program files (x86)"
FOR /f "delims=" %%a IN ('dir /b /a-d "xxxx*"^|findstr /i "\\xxxx[0-9][0-9]*\."') DO (
  ECHO copy "%%a" "c:\another folder\"
)
popd

(注意:copy禁用ECHO命令。如果输出看起来正确,请删除ECHO。)

过滤dir命令的输出以查找:
- \\文字\后跟
- xxxx已知前缀后跟
- [0-9]至少一个数字后跟
- [0-9]*零个或多个数字后跟
- \.文字.

Pro:不需要延迟扩展,应该(稍微)比Magoo的解决方案快

要查看子文件夹,请将/s添加到dir命令。