0

私が継承したこのスクリプトを非常に簡単に作り直すことで、誰かが私を助けることができるかどうか疑問に思っていました. 私はバッチ ファイルの経験がなく、この既に動作しているスクリプトを非常に簡単な方法で変更する必要がありました。

現在、このスクリプトは次のことを行います: - フォルダーを監視し、ファイルがあるかどうかを確認します - 存在する場合は、コマンド ラインを介して FTP 転送を実行します - 次に、ファイルをアーカイブ フォルダーに移動します。現在のタイムスタンプを取得し、テキスト ログ ファイルに何かを書き込みます。ファイルがない場合、スクリプトは終了し、何もしません。

現在、スクリプトはすべてのファイルを一度に検索、処理、および移動しています。を使用する代わりに、各ファイルを 1 つずつ実行するようにスクリプトを変更する方法について、正しい方向に向けられるかどうかを確認しようとしていましたどこにでも。最終的に、私がする必要があるのは、ループを正しく実行する方法を見つけ出し、使用する代わりに変数として使用するファイル名を読み取り/保存することだけだと思います どんな助けでも大歓迎です。

@ECHO OFF

:: Set count of files = 0
SET X=0

:: Set timestamp for processed folders
set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.%TIME:~9,2%

:: If more than 0 files exist begin ftp and file archival otherwise exit
FOR %%i IN (c:\Encoded_HL7_Vanderbilt\*.*) DO IF EXIST %%i (SET X=1) 
IF [%X%] gtr [0]  (cd\..\..

cd\"Program Files (x86)\Ipswitch\WS_FTP 12"
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error switching to ftp program directory>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt
exit)

wsftppro -s local:C:\Encoded_HL7_Vanderbilt\*.* -d Vandy!Vanderbilt:/incoming/ 
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error transmitting file to ftp server>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt
exit)

md "E:\Processed_HL7_Vanderbilt\%1\%TIMESTAMP%"
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error creating archive directory>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt
exit)


move "C:\Encoded_HL7_Vanderbilt\*.*" "E:\Processed_HL7_Vanderbilt%1\%TIMESTAMP%"
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error moving files to archive directory>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt
exit)) ELSE (exit)

echo %TIMESTAMP% File transfer completed successfully>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.success.txt
exit
4

2 に答える 2

0

これを試してください、それはあなたのために働くかもしれません:

@ECHO OFF &SETLOCAL

:: Set count of files = 0
SET /a count=0

:: Set timestamp for processed folders
set "TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.%TIME:~9,2%"

cd "%ProgramFiles(x86)%\Ipswitch\WS_FTP 12"  || (
    echo %TIMESTAMP% Error switching to ftp program directory>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt"
    exit /b 1
)
md "E:\Processed_HL7_Vanderbilt\%1\%TIMESTAMP%" || (
    echo %TIMESTAMP% Error creating archive directory>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt"
    exit /b 1
)

:: If more than 0 files exist begin ftp and file archival otherwise exit
FOR %%i IN (c:\Encoded_HL7_Vanderbilt\*) DO (
    set /a count+=1

    REM I don't know the wsftppro command line parameters, pls. check the man page
    wsftppro -s local:"%%~i" -d Vandy!Vanderbilt:/incoming/ || (
        echo %TIMESTAMP% Error transmitting file to ftp server>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt"
        exit /b 1
    )
    move "%%~i" "E:\Processed_HL7_Vanderbilt\%1\%TIMESTAMP%" || (
        echo %TIMESTAMP% Error moving files to archive directory>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt"
        exit /b 1
    )
) 

if %count% equ 0 (
    rd "E:\Processed_HL7_Vanderbilt\%1\%TIMESTAMP%" 2>nul
    exit /b 1
)

echo %TIMESTAMP% File transfer completed successfully>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.success.txt"
于 2013-09-18T15:39:47.987 に答える