我在一个文件夹中有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个文件......它只复制一个单件......
答案 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
}