0

私は今、あなたの知識で私の古いスクリプトを改善しようとしています

これが私の実際のスクリプトです

@echo off
SET DSESS=%CD:~22,6%
SET SSESS=P_S013
for /f %%i in ('dir /b /a-d %DSESS%_*.png') do (
convert %%i -resize 1500x1500 %%~ni.jpg
)

mkdir \\Nascfmj1\DOCNUM\partition\entier\%SSESS%\%DSESS%
move *.jpg \\Nascfmj1\DOCNUM\partition\entier\%SSESS%\%DSESS%

mkdir \\Nascfmj1\DOCNUM\partition\conservation\%SSESS%\%DSESS%
copy *.png \\Nascfmj1\DOCNUM\partition\conservation\%SSESS%\%DSESS%

copy *.pdf \\Nascfmj1\DOCNUM\partition\entier\%SSESS%

convert *0001.png -resize 1500x1500 %DSESS%_COUV.jpg
copy *_COUV.jpg \\Nascfmj1\DOCNUM\partition\pochette\%SSESS%

贅沢なことは何も見えないので

I:\2013CAPTURE\b-p_98\P_1345 実際の状況では、ciontaining フォルダーの名前を変更すると、スクリプトは正しいパスを認識しません( %CD:~22,6%)

I:\2013CAPTURE\b-p_98\から始まるフォルダーのリストがあります。 スクリプトを実行して、バッチに各フォルダーに入るように指示し、 P_1000DSESSにフォルダーの名前を付けてスクリプトに進むことができますか? また、フォルダー内では、すべてのファイルがこのタイポロジーで名前が付けられていることに注意してください ( )P_1345I:\2013CAPTURE\b-p_98\P_1000_0001.png

貴重なご協力ありがとうございます

ダン

4

1 に答える 1

0
@ECHO OFF
SETLOCAL
::
:: These are YOUR relative-root (base of scanning tree)
:: and destination
:: No idea where SSESS appears from... :(
::
SET SSESS=P_5013

SET relroot=I:\2013CAPTURE\b-p_98
SET dest=\\Nascfmj1\DOCNUM\partition

::
:: These are MY directories used for testing
::
SET dest=C:\destdir\%ssess%
SET relroot=u:\b-p_98

SET entier=%dest%\entier\%SSESS%
SET conservation=%dest%\conservation\%SSESS%
SET pochette=%dest%\pochette\%SSESS%

::
:: This is for a test - creating dummy files
:: 3 directories, 3 ".png" files in each, 
::
FOR /L %%i IN (1000,1,1002) DO (
 MD %relroot%\p_%%i
 FOR /L %%f IN (2000,1,2002) DO (
   dir>%relroot%\p_%%i\p_%%i_%%f.png
 )
)


::
:: Routine proper - create pochette
::
MD %pochette%
FOR /f %%a IN ('dir /ad/b "%relroot%\P_????" ' ) DO (
 PUSHD "%relroot%\%%a"
 FOR /f %%i IN ('dir /b /a-d P_*.png ') DO (
  CALL :CONVERT %%i -resize 1500x1500 %%~ni.jpg
 )

 MD %entier%\%%a
 move *.jpg %entier%\%%a

 mkdir %conservation%\%%a
 copy *.png %conservation%\%%a

 copy *.pdf %entier%

 CALL :convert *0001.png -resize 1500x1500 %%a_COUV.jpg
 copy *_COUV.jpg %pochette%

 POPD

)

GOTO :eof

::
:: I don't have CONVERT.EXE...
::
:CONVERT
ECHO execute command: CONVERT %*
::
:: Two different situations:
:: either create DUMMY .PDF and .JPG
:: OR DUMMY _COUV
ECHO %*|FINDSTR /i "couv" >NUL
IF ERRORLEVEL 1 (
DIR >%4
DIR >%~n4.PDF
) ELSE (
DIR >%4
)
GOTO :eof

これで問題は解決するはずです。

SSESS がどこから来たのかわからないのでSET、ファイルの先頭に置きます。

relrootスキャンを開始destする場所、ファイルが移動またはコピーされる場所に設定されます。私はすぐにそれらを MY テスト ディレクトリにリセットしました。テスト用に、現実的なデータの同様のツリーをセットアップすることをお勧めします。

次に、、entierおよびconservationディレクトリpochetteが計算されます。

次に、テスト領域にダミーの「.png」ファイルとディレクトリをいくつか作成しました。

pochetteあなたがルーティンで作っていないことに気づいたので、作ってみました。

次に、メインルーチン - P_???? に一致する各ディレクトリ名 ディレクトリ内の%relroot%は に順番に割り当てられて%%aいるため、%%a置き換えます%DSESS%

PUSHD が選択したディレクトリ名に変更されます。このCONVERTコマンドに慣れている必要があります。の作成をシミュレートするサブルーチンを呼び出し、同時に.jpgを作成し.pdfました。

.png処理されると、 のサブディレクトリentierが作成され、適切な.jpgがそこに移動されます。同じストーリーとconservations.pdfがディレクトリにコピーされentierます。

最後に、convertルーチンが再度呼び出されて*_couv.jpgファイルが完成し、次の場所に移動できます。pochette

POPD は元のディレクトリを復元し、すべてのディレクトリが完了するまで続行します。

したがって、このルーチンはどこからでも実行できます。現在のディレクトリが何であるかは関係ありません。

良いテストです!

HTH

于 2013-04-04T15:34:18.530 に答える