Batch file 根据名称长度隔离文件的批处理

Batch file 根据名称长度隔离文件的批处理,batch-file,command,Batch File,Command,我在文件夹fol1中获得了如下文件: wsd.11 fmsd.12 wsd.102 fmsd.203 typo echo 我想将有两个数字的文件,即wsd.11、fmsd.12移动到文件夹fol2, 此外,我想复制打字错误和回声到fol2 @echo off set "my_folder=c:\fol1" set "other_folder=c:\fol2" for /f "delims=" %%F in ('dir /a:-d /b /s %my_folder% ^| findstr /e

我在文件夹fol1中获得了如下文件:

wsd.11
fmsd.12
wsd.102
fmsd.203
typo
echo
我想将有两个数字的文件,即wsd.11、fmsd.12移动到文件夹fol2, 此外,我想复制打字错误和回声到fol2

@echo off
set "my_folder=c:\fol1"
set "other_folder=c:\fol2"
for /f "delims=" %%F in ('dir /a:-d /b /s %my_folder% ^| findstr /e /r  "\.[0-9][0-9]"') do (
   move "%%~dpfnxF" "%other_folder%"
)

copy "%my_folder%\echo" "%other_folder%"
copy "%my_folder%\typo" "%other_folder%"

仅当两位数字位于文件末尾时才起作用。

从命令行开始,无批处理

for %F in (fol1\*) do @echo %F|findstr "\.[0-9]*$" && (>nul move /y "%F" "fol2" & (call )) || >nul copy /y "%F" "fol2"
调用将清除任何错误,以便在移动因某种原因失败时代码不会落入复制部分


如果在批处理文件中使用,则将百分比加倍。

mv不是Windows命令,需要在所有区域使用引号以适应长文件名。Dave,您的regexp也将在名称末尾匹配3个数字。@foxidrive-我知道,这就是我对OP问题的解释。他的列表包含3位数的文件,他从未明确表示他只想移动2位数的文件。我想移动两位数的文件@foxidrive-Doh。你可能是对的。所以,如果正好是2位,请移动,如果没有,请复制,如果是1位或多于2位,请留下?非常奇怪的规格。在我看到OP的澄清之前,我将保留我的答案。