0

特定のファイルをPCからUSBにコピーしたい

私のコード:

  xcopy /H /Y /C /R "C:\image1.jpeg" "G:\backup\image.jpeg"

私は次のことをしたい: G:\backup\image1.jpeg が存在する場合、image.jpeg を image2.jpeg として (または別の名前で) コピーし、

image2.jpeg が存在する場合は、image3.jpeg などとしてコピーします。

これを行うことは可能ですか?

4

1 に答える 1

2

ソース名は「image.jpeg」で、宛先にはサフィックスが追加されていると仮定します。

元の名前の終わりと接尾辞の始まりを明確にするために、追加された接尾辞の前にドットを付けることをお勧めします。元の名前の最後にすでに番号が付いている可能性があります。

これは、最大100コピーをサポートする、大雑把ですが非常に効果的なブルートフォース方式です。明らかに、上限は簡単に増やすことができます。

call :backup "c:\image.jpeg"
exit /b

:backup
for /l %%N in (1 1 100) do (
  if not exist "G:\backup\%~n1.%%N.%~x1" (
    echo F|xcopy %1 "G:\backup\%~n1.%%N.%~x1" >nul
  )
  exit /b
)

しかし、潜在的な問題があります。image.1.txtとimage.2.txtがすでに存在しているが、image.1.txtを削除するとします。次回バックアップすると、image.1.txtが再作成され、image.2.txtが最新のバックアップであると思われるかもしれません。

以下を使用すると、番号に全体が含まれている場合でも、既存の最大のサフィックスよりも大きいサフィックス1の番号で新しいバックアップを常に作成できます。

@echo off
call :backup "c:\image.jpeg"
exit /b

:backup
setlocal disableDelayedExpansion
set /a n=0
for /f "eol=: delims=" %%A in (
  'dir /b "g:\backup\%~n1.*%~x1"^|findstr /rec:"\.[0-9][0-9]*\%~x1"'
) do for %%B in ("%%~nA") do (
  setlocal enableDelayedExpansion
  set "n2=%%~xB"
  set "n2=!n2:~1!"
    if !n2! gtr !n! (
    for %%N in (!n2!) do (
      endlocal
      set "n=%%N"
    )
  ) else endlocal
)
set /a n+=1
echo F|xcopy %1 "g:\backup\%~n1.%n%%~x1" >nul
于 2012-12-01T16:56:34.420 に答える