问题似乎很简单,但我自己找不到解决方案。
我需要将文件复制到同一个文件夹,但名称不同。
这对我有用,但很明显,它不起作用:
for /f %%f in ("*.exe") do copy "%%f" "%%f_a"
当然,在此示例中,应手动创建“新建文件夹”。
这是我想要实现的目标:
C:\Test\foo.exe -> C:\Test\foo_a.exe
C:\Test\bar.exe -> C:\Test\bar_a.exe
C:\Test\baz.exe -> C:\Test\baz_a.exe
我尝试使用参数扩展程序as shown here,但目前没有运气。
答案 0 :(得分:1)
这在PowerShell中很容易。使用System.IO.FileInfo成员构造所需的名称。如果您确信新名称是正确的,请从-WhatIf
cmdlet中删除Copy-Item
。
Get-ChildItem -File -Filter '*.exe' |
ForEach-Object {
Copy-Item -Path $_.FullName `
-Destination $($_.DirectoryName+'\'+$_.BaseName+'_a'+$_.Extension) -WhatIf
}
如果必须在cmd.exe shell中运行此命令,请将PowerShell代码放在renexe.ps1等文件中,然后使用此命令运行它。
powershell -NoLogo -NoProfile -File renexe.ps1
如果您不希望或不允许继续使用PowerShell,可以使用cmd.exe来完成。如果您对COPY
命令正确感到满意,请从中删除echo
。
FOR /F %%f IN ('DIR /B /A:-D "*.exe"') DO (
echo COPY "%%~f" "%%~nf_a%%~xf"
)