0

私は Stackoverflow を初めて使用するので、これを正しい場所に投稿していることを願っています。私はかなり長い間、自分の質問に対する答えを探していました。ファイルの先頭に情報を追加しようとしています。情報が必要なファイルには、動的なファイル名があります (最初の 5 文字を除いて同じになることはありません)。ファイルで必要な情報をコードで確認できます。ファイル元ファイルの名前は LBL043629201313114512.DTA です。ファイル名についての構成は「LB04xxxxです。XXXXは、正しいファイルを確実に取得するために検索しているものです。

ファイルの先頭に収集されたデータを含む元のファイル名 (LBL......DTA) を出力する必要があります。どんな助けでも素晴らしいでしょう。

set /p STORE=Please enter store number:
set /p NAME=Please enter name:
set /p ADDRESS=Please enter address:
set /p CITY=Please enter address:
set /p STATE=Please enter State:
set /p ZIP=Please enter ZIP:
set /p SPECIAL=Add any Special Instructions:
(
    echo %NAME%
    echo %ADDRESS% 
    echo %CITY% %STATE% %ZIP%
    echo %SPECIAL%
) > address.txt
copy address.txt+LBL04%STORE%*.DTA=test.txt
4

2 に答える 2

0

最後に2行追加するだけです:

del /q LBL04%STORE%*.DTA 
ren test.txt LBL04%STORE%*.DTA

元の .DTA はもう必要ありません (スクリプトをテストしている限り、バックアップを作成することをお勧めします)

于 2013-03-29T20:13:05.907 に答える
0
@ECHO OFF
SETLOCAL
FOR %%i IN (store name address 
            city state zip 
        special target) DO (SET %%i=)
set /p STORE=Please enter store number:
set /p NAME=Please enter name:
set /p ADDRESS=Please enter address:
set /p CITY=Please enter address:
set /p STATE=Please enter State:
set /p ZIP=Please enter ZIP:
set /p SPECIAL=Add any Special Instructions:
FOR %%i IN (store name address 
            city state zip 
        special) DO IF NOT DEFINED %%i (SET %%i= )
(
    ECHO.%NAME%
    ECHO.%ADDRESS% 
    ECHO.%CITY% %STATE% %ZIP%
    ECHO.%SPECIAL%
) > address.txt
FOR /f %%i IN (
  'dir /b /a-d /o-d lbl04%store%*.dta'
  ) DO IF NOT DEFINED target SET target=%%i
IF NOT DEFINED target ECHO LBL04%STORE%*.DTA NOT found&GOTO :EOF
copy address.txt+%target%=test.txt >nul
MOVE test.txt %target% >nul

type %target%

明らかに、実際のデータではなく、最初に実際のデータのコピーに対してこれを試す必要があります。

1つ目FORは、リスト内の変数名が環境から削除されることを保証するため、それらに既存の値がある場合enter、プロンプトのいずれかで押すと、その値が保持されます。

2 番目のFORループは、入力された変数のそれぞれに値があることを確認します。targetこのグループには含まれないことに注意してください。=と の間にスペースがあり)ます。

簡単なSET指示では、スペースは重要です。この構文(SET var=)または同等のものは、変数が [nothing] に設定されてSET "var="いることを保証します。var問題SET var=は、一部のエディターが行にターミナル スペースを残し、そのような状況下でvarは、それらのターミナル スペースに設定されるということです - そして、それらは少し見にくいです。また、変数 " " ではなくSET var =...変数 " " を設定しますが、それはまったく別の話です。varvar

ECHOステートメントの . の直後にドットがあることに注意してくださいECHO。ステートメントECHOor ECHOwill によりECHO、その状態が報告ECHO is offされ、出力に表示されます。「 」を追加すると、噛む何かが.与えられ、それを超える行コンテンツが生成されますECHO.

dir次のステートメントの命令は、/b基本的な形式 (ファイル名のみ)のディレクトリ リストを生成し、逆日付順/a-dのディレクトリ名は生成しません。/o-dこれFOR /fは、dir /b ...命令の出力を 1 行ずつ読み取るメカニズムです。「入力」読み取りの次の行の内容は、%%i各反復に適用されます。したがって、見つかった最初のファイル名の一致LBL04%STORE%*.DTAが設定され、 が設定されているため、それtarget以降の行はゲートtargetのために無視されます。if not defined

一致するファイルがない場合、target定義されない (最初のforループで削除された) ため、エラー メッセージが生成される可能性があります。

それ以外の場合は、ファイルを連結してからtest.txtmove実際にreplacesはファイル " %target%(存在することがわかっている) と連結されたバージョンのステートメントを実行します。

>nulこれらの最後の 2 行のそれぞれで、「1 ファイルがコピー/移動されました」というメッセージが抑制されます

仕事終わり!TYPED証拠としての新しいファイル

于 2013-03-30T03:24:48.830 に答える