-1

まず第一に、私はここでバッチ ファイル スクリプトを作成するまったくの初心者であり、喜んで学習します。

ファイル拡張子/file-ext: ext1ext2、およびext3を持つフォルダーにたくさんのファイルがあるとしましょう。

すべての単一ファイルには、次のような増分があります。

filename.file-ext.1
filename.file-ext.2
filename.file-ext.3
...
filename.file-ext.x

主な目的は、古いインクリメント (1 から x-1 まで) をバックアップし、それらを新しいフォルダーにバックアップしてから、最後のインクリメント "x" を "1" に変更することです。

あなたからのあらゆる種類の助けをいただければ幸いです。

4

2 に答える 2

1

ファイル名に数字が含まれている場合の主な問題は、数字ではなくアルファベット順で表示されることです。例えば:

filename.file-ext.1
filename.file-ext.10
filename.file-ext.11
filename.file-ext.12
filename.file-ext.2
filename.file-ext.3
filename.file-ext.4
filename.file-ext.5
filename.file-ext.6
filename.file-ext.7
filename.file-ext.8
filename.file-ext.9

for前のリストの最後のファイルは 12 である必要がありますが、コマンドまたはコマンドで指定された姓dirは 9 です。以下のバッチ ファイルは 2 パス アプローチを使用します。最初にリスト全体を確認して実際の最後の数値ファイルを取得し、次に、もう一度リストして、最後のファイルを除くすべてのファイルをバックアップします。

@echo off
setlocal EnableDelayedExpansion

rem First pass: Get the last numeric file
set last=0
for %%a in (filename.ext.*) do (
   set num=%%~Xa
   if !num:~1! gtr !last! set last=!num:~1!
)

rem Second pass: Backup all files excepting the last one
for %%a in (filename.ext.*) do (
   if %%a neq filename.ext.%last% move %%a \backupDir
)

rem Rename the last file, if it is not 1
if %last% gtr 1 ren filename.ext.%last% filename.ext.1

上記のプログラムは、可能な限り単純かつ明確に記述されています。ファイル名にスペースが含まれる可能性がある場合は、引用符を挿入する必要があります。

于 2013-04-16T19:10:15.727 に答える
0
@ECHO OFF
SETLOCAL
SET filename=FILENAME
SET fileext=FILE-EXT
SET "deedpoll="
FOR /f "delims=" %%i IN ('dir /b /a-d /o:-d "%filename%.%fileext%*"') DO (
 IF DEFINED deedpoll ECHO MOVE "%%i" "\newdir\" >nul
 IF NOT DEFINED deedpoll SET "deedpoll=%%i"
)
IF DEFINED deedpoll ECHO REN "%deedpoll%" "%filename%.%fileext% 1"

関連する実際のファイル名やファイル拡張子についての手がかりがないため、それらが単純な英数字とスペースであると想定することしかできません。また、宛先ディレクトリが存在し、現在のディレクトリがファイルセットを含むディレクトリであると仮定しました。

そして、私はあなたのシーケンスが DATE に機能すると仮定しました - それはバックアップされず (に移動されnewdir)、名前が変更された最新のファイルです ...1

とても簡単です。最初にクリアしてから、日付の逆順のディレクトリ名を使用せずに、裸のファイル名のリストをdeedpoll実行します。dir/b/a-d/o:-d

したがって、%%i に割り当てられる最初のファイル名が最新になります。deedpollはまだ設定されていないため、moveは実行されずdeedpoll、最新のファイルの名前が割り当てられます。

deedpollが設定 (または定義) されたためmove、指定されたマスクに一致する他のファイル名のそれぞれに対して が実行されます。

最後に、deedpollバージョン 1 に名前が変更されます。

REName とMOVEコマンドは単にECHO画面に表示されることに注意してください。これにより、バッチが実行したいことを確実に実行できるようになります。すべてが正しければ、これらのECHOキーワードを両方とも削除して、名前変更と移動を有効にします。

于 2013-04-16T16:12:03.197 に答える