我需要将所有文本文件复制到一个文件夹,文件夹名称长度为五个字符。我知道这个命令用于列出:
$ dir folder /B | findstr /R "^.....\.txt"
但我想将上述命令列出的所有文件复制到不同的文件夹。
答案1
我问(不只是问我自己)“这不是很简单吗……”?
copy C:\ORIG_DIR\?????.txt C:\Dest_Dir
感谢 G-Man 测试在电源外壳有用,同时在命令执行程序上述命令将复制每个匹配项最多五个字符以及所有以 开头的扩展名.txt
。
问号(?)
使用问号代替名称中的单个字符。例如,如果您输入 gloss?.doc,您将找到文件 Glossy.doc 或 Gloss1.doc,但不会找到 Glossary.doc。
参考:
通配符在 Windows 下。
答案2
这在 Batch 中是可能的,但在 PowerShell 中很容易。
ls | foreach { if (($_.BaseName.Length -eq 5) -and ($_.Extension -eq ".txt"))
{ $_.CopyTo("\Name\Of\Target\Folder\" + $_.Name) }
您也可以通过根据正则表达式检查文件名来完成此操作,但此方法效果很好。
答案3
在批处理中你可以做这样的事情:
@Echo OFF
Set "targetDir=C:\Dir"
For %%# In ("*.txt") DO (
(Echo "%%~nx#" | findstr /R "^......\.")1>Nul 2>&1 && (
Echo Copying "%%~nx#" ...
(Copy /Y "%%~f#" "%targetDir%\%%~nx#")1>NUL
)
)
Pause&Exit /B 0
答案4
这是另一种批处理方法:
@echo 关闭 设置本地启用延迟扩展 对于 (*.txt) 中的 %%f 执行( 设置 foo=%%f 设置 foo=!foo:~5,5! 如果 !foo!==.txt ( (此文件名 (%%F) 与模式匹配?????。TXT;用它做你想做的事。) ) )
是子字符串机制!foo:~5,5!
的一个实例 ;它从第 6 个字符(偏移量 5)开始提取文件名的子字符串,长度为 5(足够捕获,如果还有更多字符,则再多一个字符)。因此, 如果文件名的第 6、7、8 和 9 个字符是、、和,并且没有第 10 个字符,则变量具有值。!variable:~offset:length!
.txt
foo
.txt
.
t
x
t