0

Windows .Bat ファイルは、コマンド ウィンドウから実行した場合と、bat ファイルをダブルクリックした場合とで動作が異なります。これは私のファイルです:

ECHO ON
del activity_ftp.log
cd D:\My_Test
IF EXIST united_ops*.csv (
for %%i in (united_ops*.csv) do (
set size=0
set /A size=%%~zi
echo %%i,%size%,397312,624640 > D:\My_Test\activity_ftp.log
)
)

これをコマンドウィンドウを開いて呼び出して実行すると、

4

2 に答える 2

3

コードにいくつかの問題があります。
cd d:\My_testにいる場合にのみ機能します。またはここでD:使用できます。cd /dpushd

echo ...%size%forブロックが実行されたときではなく解析されたときに展開されるため、機能しません。

ファイルが存在する場合にのみ展開されるため、if exist冗長なようです。for %%i in ( united_ops*.csv)

ECHO ON
setlocal EnableDelayedExpansion
del activity_ftp.log
pushd D:\My_Test
for %%i in (united_ops*.csv) do (
    set size=0
    set /A size=%%~zi         
    echo %%i,!size!,397312,624640 > D:\My_Test\activity_ftp.log
)
于 2012-06-13T20:49:30.040 に答える
0

jebの答えに基づいて構築します。

1)FORループは、パターンに一致する多くのファイルを反復処理する場合があります。ただし、ファイルリダイレクトの上書きモードを使用します。見つかった各ファイルは、前のファイルの出力を上書きします。最終的な出力ファイルに複数の行が含まれることはありません。を使用して追加モードに変更できます>>が、より良い方法があります。ループ全体を括弧で囲み、を使用して上書きモードで1回リダイレクトする方が高速です>

2)サイズを0に設定し、次にファイルサイズに設定し、行がエコーされた後は使用しません。変数はまったく必要ないので、拡張を遅らせる必要はないと思います。

3)一番上で削除したファイルにはパス情報が含まれていないため、正しいフォルダから削除されていない可能性があります。とにかく上書きモードでリダイレクトしているので不要です。

4)現在のディレクトリを変更する代わりに、FORステートメントにパスを含めることができます。

ECHO ON
>"D:\My_Test\activity_ftp.log" (
  for %%i in ("d:\My_Test\united_ops*.csv") do (
    echo %%~nxi,%%~zi,397312,624640
  )
)
于 2012-06-13T22:00:53.967 に答える