我有一个名为的文件夹,其中有一个名为的文件:'template.xlsx'
,还有数百个名为的文件:
old_2301 Item 1.xlsx
old_2014 Item 2.xlsx
old_5321 Item 3.xlsx
- ...
old_3212 Item 200.xlsx
我想复制该文件template.xksx
并创建 200 个新文件:
2301 Item 1.xlsx
2014 Item 2.xlsx
5321 Item 3.xlsx
3212 Item 200.xlsx
我尝试过类似的事情:
在文件夹中,输入Shift+右移:选择“在此处打开命令窗口”
for %a in (*.*) do copy "template.xlsx" ... ren ...?
我想将复制的template.xlsx
文件重命名为与其他文件相同的名称,但删除old_
一些内容。
有没有简单的方法可以做到这一点?
答案1
我想复制template.xlsx
到其他文件的名称,并old_
删除
使用以下批处理文件:
@echo off
setlocal enabledelayedexpansion
rem get list of file names
for /f "usebackq tokens=*" %%i in (`dir /b old_*.xlsx`) do (
rem save the filename
set _name=%%i
rem remove old_ from the name
set _name=!_name:old_=!
rem do the copy to the modified name
copy "template.xlsx" "!_name!"
)
endlocal
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 目录- 显示文件和子文件夹的列表。
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。
- 对于/f- 循环命令以执行另一个命令的结果。
- 变量编辑/替换- 编辑并替换分配给字符串变量的字符。
答案2
您必须使用old_*
以您的名称源命名的文件并在下划线处拆分。
@Echo off
For /f "tokens=1* delims=_" %%A in (
'Dir /B /A-D "old_* Item *.xlsx"'
) Do Echo Copy template.xlsx "%%B"
如果输出看起来正常,请删除复制前面的回显。
解释/f 选项的解析:
文件名 old_2301 Item 1.xlsx 分隔符 _ 代币 1 _ * (其余) 对于变量 %%A %%B
不含批处理的命令行变体:
For /f "tokens=1* delims=_" %A in ('Dir /B /A-D "old_*.xlsx"') Do Copy template.xlsx "%B"
答案3
除非我真的想要一个可以反复运行的程序,否则如果这只是一次性或几次,我会使用 Notepad++ 或任何其他具有块复制和粘贴功能的文本编辑器。在相关目录中打开命令提示符并键入dir/b > 1.txt
,结果为:
D:\MiscJunk\1>type 1.txt
1.txt
old_2014 Item 2.txt
old_2301 Item 1.txt
old_5321 Item 3.txt
template.txt
在 Notepad++ 中编辑 1.txt 并根据需要添加以下行:
copy template.txt ""
copy template.txt ""
copy template.txt ""
块复制(Alt Shift 箭头键)文本:
2014 Item 2.txt
2301 Item 1.txt
5321 Item 3.txt
并将其粘贴到引号之间:
copy template.txt "2014 Item 2.txt"
copy template.txt "2301 Item 1.txt"
copy template.txt "5321 Item 3.txt"
然后检查命令是否正确并进行相应调整后,只需将这些命令复制并粘贴回命令提示符中,结果如下:
D:\MiscJunk\1>dir/b
2014 Item 2.txt
2301 Item 1.txt
5321 Item 3.txt
...
这种方法非常简单,无需调试,出错的可能性很小。在 Notepad++ 中敲入命令块是我经常做的事情。