0

ループ用のバッチ ファイル内の変数に頭を悩ませています。ダウンしたと思ったら、思ったように動かない例を見つけて、これでぐるぐる回っているような気がします...

違いが生じる場合に備えて、大量のコード全体を作成しました。基本的に、多くのサブフォルダーを含むアーカイブフォルダーがあり、アップロードデータ (スクリプトの最後でアーカイブフォルダーに移動されるかどうかを確認したい-この部分が機能するようになったときに書き込まれます) は既に処理されています。その場合は、次の日付の Duplicates フォルダーに移動します。

 @echo off

 for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set localDT=%%j
 set localYYYY=%localDT:~0,4%
 set localMM=%localDT:~4,2%
 set localDD=%localDT:~6,2%
 set localDate=%localYYYY%-%localMM%-%localDD%
 set localTime=%localDT:~8,2%:%localDT:~10,2%

 for %%f in ("C:\Test\837Store\*.837") DO if exist /R "C:\Test\Archive\%%~nxf" (
     set VariableTemp=%%~nxf
     echo %VariableTemp%
     IF NOT EXIST "C:\Test\Archive\Duplicates" mkdir "C:\Test\Archive\Duplicates"
     IF NOT EXIST "C:\Test\Archive\Duplicates\%localYYYY%" mkdir "C:\Test\Archive\Duplicates\%localYYYY%"
     IF NOT EXIST "C:\Test\Archive\Duplicates\%localYYYY%\%localMM%" mkdir "C:\Test\Archive\Duplicates\%localYYYY%\%localMM%"
     copy "%%~nxf" "C:\Test\Archive\Duplicates\%localYYYY%\%localMM%"
     echo %localDate% %localTime%        Duplicate claims file: %%~dpnxf File moved to archive     >> "C:\Test\Log\Error.log"
 )
 pause

私の問題は、変数 %%f がループを介して設定されていないようです。mkdir コマンドは実行されますが、コピーに到達すると「ファイルが見つかりません」というエラーが表示されます。何が起こっているのかを確認するために、ファイルの名前と拡張子が表示されることを期待して、VariableTemp を含めてコードに従って設定しました。代わりに、私のエコーは「%~nxf」を出力しています

これらの変数がどのように機能するかを理解してくれる人はいますか? 837Store からファイル名が表示されないのはなぜですか?

追加情報として、C:\Test\837Store に次の 2 つのファイルがあります。

1.837 2.837

C:\Test\Archive\2013\08 に同じ 2 つのファイルがあるため、それらは 837Store から関連する Duplicates フォルダーに移動されると予想されます。

ありがとう。

4

1 に答える 1

1
@ECHO OFF
SETLOCAL

for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set localDT=%%j
set localYYYY=%localDT:~0,4%
set localMM=%localDT:~4,2%
set localDD=%localDT:~6,2%
set localDate=%localYYYY%-%localMM%-%localDD%
set localTime=%localDT:~8,2%:%localDT:~10,2%

mkdir "U:\Test\Archive\Duplicates\%localYYYY%\%localMM%" 2>nul


for /R U:\Test\837Store %%f in (*.837) DO ECHO processing %%~ff&if exist "U:\Test\Archive\%%~nxf" (
 IF EXIST "u:\Test\Archive\Duplicates\%localYYYY%\%localMM%\%%~nxf" (
  echo %localDate% %localTime%        Duplicate claims file: %%~dpnxf File ALREADY DUPLICATED   >> "u:\Error.log"
 ) ELSE (
  MOVE "%%~ff" "u:\Test\Archive\Duplicates\%localYYYY%\%localMM%"
  echo %localDate% %localTime%        Duplicate claims file: %%~dpnxf File moved to archive     >> "u:\Error.log"
 )
)
rmdir "U:\Test\Archive\Duplicates\%localYYYY%\%localMM%" 2>nul
rmdir "U:\Test\Archive\Duplicates\%localYYYY%" 2>nul
rmdir "U:\Test\Archive\Duplicates" 2>nul
GOTO :EOF

これが私の解釈です。

テストには RAM ドライブを使用したので、ドライブ文字を変更する必要があり、エラー ログの場所も変更する必要があります。

重複が既に存在するための追加のテストを追加しました-その状況を報告するだけです。

COPYあなたの話に合わせて、あなたを aに変更しましたMOVE。いずれにせよ、>nul抑制したい場合は、コマンドに追加された '1 file copy/moved' メッセージを抑制する必要があります。

MD/MKDIR、ターゲットの上に必要なサブディレクトリを作成します。

最後の 3 つの 'rmdir/RD' は、ターゲット名を持つ空のサブディレクトリを削除するように設計されています。

于 2013-08-07T16:29:05.110 に答える