2017-01-12 6 views
0

を削除します。バッチスクリプトは、私が名前のファイルのリストを持っている「重複」ファイル

file (maxnumer).txtfile.txtの内容を取得できるスクリプト.batが必要です。

+4
+0

私はそれをどうするか分かりません。私は今、どのようにループのために使用する場合、条件、変数を設定しますが、私は多くの経験がありません。 Miの最初のアイデアはforループを実行し、 "file(%i).tex"が存在するかどうかをテストすることです。しかし、私はどのように進行するかわからない... –

+1

私はあなたのポストで質問を見つけることができません。タイトルはあなたが何かを削除したいと言っていますが、 "質問"本文には何を削除するか記載されていません。ですから、明確にしてください!最大番号のファイルにも最新の作成日または変更日がありますか?あなたがこれまでに試したことと何が問題になっているかを分かち合いましょう! StackOverflowは無料でスクリプトを要求する場所ではありません!これを読んでください:[ask] – aschipfl

答えて

4

dir /B /OD /TW file*.txtは、最後に書き込まれた時間のソート順でファイル名をリストします(cf. dir /?)。

@echo OFF 
SETLOCAL EnableExtensions 
rem delete empty `_lastfile` variable 
set "_lastfile=" 
rem store file name of last written time into `_lastfile` variable 
for /F "delims=" %%G in ('dir /B /OD /TW file*.txt 2^>NUL') do set "_lastfile=%%~G" 
rem            ↑↑↑↑↑↑ suppress errors 
rem check the `_lastfile` variable 
rem is defined? 
rem     AND is different from "file.txt"? 
if defined _lastfile if /I "%_lastfile%" NEQ "file.txt" copy /Y "%_lastfile%" "file.txt" 

資源(必読):

+0

大変ありがとうございました –

+0

確かに私の答えよりも、よくできました:) –

1

ここではちょっとした解答です。このスクリプトは、現在のファイル(10)にあったテキストが含まれているだけではfile.txtを残し、file.txtにfile (10).txtまでfile (1).txtからすべてのファイルを移動します

は昇順でそれをやって

を.txtに保証されます存在する最も高い番号は最後に移動される番号です。

@echo off 
set /P name=Enter name of file without extension: 
echo enter extension: 
set /P ext=. 
echo. & echo. 
echo these actions will be performed: & echo. 
FOR /L %%A IN (1,1,10) DO @echo move /y "%name% (%%A).%ext%" "%name%.%ext%" 
echo. & pause & echo. 
FOR /L %%A IN (1,1,10) DO  move /y "%name% (%%A).%ext%" "%name%.%ext%" 
pause 

あなたは存在しないファイルを移動しようとしてからスクリプトを停止するにはIF EXIST %name% (%%A).%ext%を使用することができますが、それは本当にそれを行うには何も影響を与えませんので、私は気にしませんでした。

上記のスクリプトは、特定の名前付きファイルに対して実行します。ことが可能となりますディレクトリ内のすべてのファイルのためにそれを行うには、ここにあなたがテキストファイルに記載されているディレクトリ内のすべてのファイルを取得するためにdir /b >filenames.txtを使用

を軌道に乗るためにいくつかのヒントがある

すべてのためのアクションを実行するにはテキストファイルの行

for /f "usebackq delims= tokens=* %%a in (`filenames.txt`)" DO (
    ::some stuff here 
) 

を行い、私はそれに行くかの方法は、あなただけの「非重複」ファイル名のリストを持っているように、すべての(n)のファイルを削除し、手動で、filenames.txtを取得することです、これを入力として使用します。あなた

おそらくより洗練されたソリューションがあるかもしれませんが、バッチのすべての特質をもって、私はそれらがページとページであることに驚かないでしょう。

あなたは、私はあなたがすべての元のファイルを保存したい場合はCOPY

を使用したい、ちょうどコピーなしで最終file.txtなどで終わるすべてではない元のファイルを保持したい場合は、 COPY NOT MOVEを使用したいと考えています。ループのためのそのような場合には

、すべての余分な操作(すなわち唯一のために、すべてのファイルをコピーし、最も大きい番号のファイルをコピーではありません)あなたの(今複数行)内のIF NOT EXIST %name% (!B!).%ext%どこ!B!=%%A+1のようなものを除去し、上へSETLOCAL EnableDelayedExpansionを使用算術演算を適切に行う。しかし、実際には必要ありません。1、2、3をコピーしてください。次に、1と2をスキップして4をスキップするより少し遅い場合は4が同じことをします。

これは、これが明確でない場合は、質問をしてください。

関連する問題