如何在保留部分旧名称的同时使用新名称复制文件?

时间:2014-07-31 08:14:08

标签: batch-file powershell

我在一个文件夹中有12个文件,每个文件名为a_01.jpg a_02.jpg(...)等

我想使用新名称将这些文件复制到同一文件夹中,例如daniela_01.jpg等

所以我尝试使用批处理文件:

    copy C:\Users\name\temp\a_*.jpg C:\Users\name\temp\daniela_*.jpg 

这并没有成功

    copy C:\Users\name\temp\a_??.jpg C:\Users\name\temp\daniela_??.jpg 

我没有得到12个文件......它只复制一个单件......

4 个答案:

答案 0 :(得分:1)

假设您的文件位于c:\ temp目录:

ls c:\temp\*.jpg | %{ copy $_.fullname c:\temp\daniel$($_.name)}  
您的评论后删除

(删除第一个字母)

ls c:\temp\*.jpg | %{copy $_.fullname c:\temp\daniel$(($_.name).substring(1))} 

批量生产你可以做到:

copy *.jpg daniel*.jpg

答案 1 :(得分:1)

我会使用正则表达式:

ls C:\Users\name\temp\a_*.jpg | % {
    if ($_ -match 'a_(.*?).jpg') {
        Copy-Item $_ ('C:\Users\name\temp\daniela_' + $Matches[1] + '.jpg')
    }
}

答案 2 :(得分:1)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "oldpfx=a_"
SET "newpfx=daniela_"
SET "delimchar=_"
FOR /f "tokens=1*delims=%delimchar%" %%a IN (
 'dir /b /a-d "%sourcedir%\%oldpfx%*.jpg" '
 ) DO (
  ECHO COPY "%sourcedir%\%%a%delimchar%%%b" "%sourcedir%\%newpfx%%%b" 
)

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

您还需要指定旧的和新的前缀。可以使用

计算delimchar
set "delimchar=%oldpfx:~-1%"

但分隔符只能是一个字符,而不是字符串。

请注意,由于您的旧前缀与新的前缀相同,因此重新运行该过程将尝试再次执行复制并且会尝试将daniela_*.jpg复制到{ {1}}。


最好从一开始就告诉我们整个问题。

daniela_daniela_*.jpg

首选,使源和目标不同。这样,该过程可以轻松重新运行。

更改变量之前需要做的就是在简单的文本文件中设置你的名字(我使用了一个名为@ECHO OFF SETLOCAL SET "sourcedir=U:\sourcedir" SET "destdir=U:\destdir" SET "namesfile=U:\q25053916.txt" SET "oldpfx=a" SET "delimchar=_" FOR /f "tokens=1*delims=%delimchar%" %%a IN ( 'dir /b /a-d "%sourcedir%\%oldpfx%%delimchar%*.jpg" ' ) DO ( FOR /f "delims=" %%p IN ('type "%namesfile%"') DO ( ECHO COPY "%sourcedir%\%%a%delimchar%%%b" "%destdir%\%%p%delimchar%%%b" ) ) GOTO :EOF 的文件,其中包含我的测试数据。)

q25053916.txt

q25053916.txt

答案 3 :(得分:1)

我会这样做:

Get-Item 'C:\source\folder\a_*.jpg' | % {
  $target = Join-Path 'C:\target\folder' ($_.Name -replace 'a_','daniela_')
  Copy-Item $_ $target
}