我需要一个批处理文件,在运行时会查看Program Files (86)
中的特定文件夹,然后将该文件复制并粘贴到另一个文件夹中。现在我已经知道了这个网站的代码。
这是我的困境:文件从计算机变为计算机。我知道前4个字母是xxxx
,然后是未知数量的数字。
我可以创建一个可以查找文件名开头的.bat文件吗?
答案 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
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
为了测试目的,所需的COPY命令仅为ECHO
。 在您确认命令正确后,将ECHO(COPY
更改为COPY
以实际复制文件。附加>nul
以取消报告消息(例如1 file copied
)
设置delayedexpansion
模式后,在/b
基本模式/a-d
中执行源目录的目录扫描,不带目录,并将找到的每个文件名分配给%%a
。
仅在name
的名称部分设置%%a
,然后删除前4个字符并在修改后的名称中加入9
。
然后从结果中删除所有0
到9
,如果name
变空,请执行复制。请注意,添加了9
,以便字符串name
在for /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
命令。