2017-04-24 5 views
-1

実行時にProgram Files (86)の特定のフォルダを探し、そのファイルを別のフォルダにコピーアンドペーストするバッチファイルが必要です。今私はすでにこのウェブサイトのおかげでコードを知っています。ファイル名の最初の4文字の後ろに番号を付けてファイルをコピーするには?

私のジレンマは次のとおりです。ファイルはコンピュータからコンピュータに変わります。私は最初の4文字がxxxxであり、その後に未知の数字が続くことを知っています。

ファイル名の先頭を探すことができる.batファイルを作成できますか?

+0

「コピー」%ProgramFiles(x86)%\ Source Folder \ xxx * "" C:\ Target Folder \ "'という、xxxxで始まるすべてのファイルをコピーするのに単にワイルドカード '*'を使用するのはどうですか?この単純なコマンドラインでは、コピーしたファイルのファイル名に 'xxxx '以上の文字が含まれているかどうかはチェックされず、これらの文字はすべて0から9までの数字です。しかし、おそらく、ソースフォルダに 'xxxx'で始まるファイルは1つしかないので、追加のファイル名チェックの仕組みは全く必要ありません。あなたの質問はそれを知るには広すぎます。 – Mofi

答えて

1
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\abcd*" ' 
) DO (
SET "name=%%~na" 
SET "name=9!name:~4!" 
FOR /L %%z IN (0,1,9) DO SET "name=!name:%%z=!" 
IF NOT DEFINED name ECHO(COPY "%sourcedir%\%%a" "%destdir%\" 
) 

GOTO :EOF 

あなたの状況に合わせてsourcedirdestdirの設定を変更する必要があります。

必要なCOPYコマンドは、テストのために単なるECHOです。 コマンドが正しいことを確認したら、ECHO(COPYからCOPYに変更して、実際にファイルをコピーします。レポートメッセージを抑制するために>nulを追加(例。1 file copied

delayedexpansionモードを設定した後、ディレクトリなし/b基本モード/a-dで、ソースディレクトリのディレクトリスキャンを実行し、%%aに発見された各ファイル名を割り当てます。

セットname fomの名前部分のみ%%aの場合は、最初の4文字を削除し、変更した名前に9を含めます。

次に、結果から0~9をすべて削除し、nameが空になったらコピーを実行します。文字列namefor /Lループの最後の繰り返しまで空でないように、9が追加されていることに注意してください。

0
@echo off 
pushd "c:\program files (x86)" 
FOR /f "delims=" %%a IN ('dir /b /a-d "xxxx*"^|findstr /i "\\xxxx[0-9][0-9]*\."') DO (
    ECHO copy "%%a" "c:\another folder\" 
) 
popd 

(注:copyコマンドはECHOで無効に設定された出力が正しいようならば、ECHOを削除します。。)dirコマンドの出力を見つけるため

フィルタ:
- \\リテラルxxxx
続い知らプレフィックス - -
続い[0-9]少なくとも一つ番号
続いから
続い[0-9]*ゼロ以上の数字 - \.リテラル.

Proの:不要遅延拡大は、(少し)のサブフォルダにも見えるようにマグーのソリューション

よりも高速である必要があり、に/sを追加dirコマンド。

関連する問題