0

dirA と dirB の 2 つのディレクトリがあります。現時点では、dirB のみを使用します。dirB には、もちろん異なる名前/拡張子で名前が付けられた多くのファイルが含まれています。

それぞれから最初の 6 文字を抽出する必要があります。その後、プログラムの 2 番目の部分に進みます。今のところ、各ファイルから最初の 6 文字を抽出して txt ファイルに書き込むだけで済みます。

これが私が書いたコードです。同じ変数を持つ代わりに、FORはうまく機能しない、またはより良く機能する唯一のものです:ループ1でfile1、ループ2でfile2などという名前のSTR.

私は STR = file1file2fileN を持っています。var は file1f (既に 6 文字) です。

@ECHO off
CLS

SET dirA=C:\dirA
SET dirB=C:\dirB
SET lista=C:\lista.txt
IF NOT EXIST %dirB% GOTO DNF
IF NOT EXIST %dirA% GOTO DNF

setLocal EnableDelayedExpansion
CD %dirB%
DIR /B * > %lista%

:MAIN
CLS
SET /P S=Last Filename: || Set S=null

:LOOP 
IF /I "%S%"=="null" GOTO MAIN 
FOR /F "tokens=*" %%I IN (%lista%) DO SET str=!str!%%I
SET var=!str:~0,6!
echo !str! > str.txt
echo !var! >> file.txt
SET !str!%%I
IF /I %S%==!var! GOTO:EOF
IF /I %S% NEQ !var! GOTO SNF
GOTO LOOP

:DNF
ECHO.
ECHO %dirA% - %dirB% not found
GOTO:EOF

:SNF
ECHO.
ECHO %S%  Not found
TIMEOUT /T 2
GOTO MAIN

GOTO:EOF

endLocal
end
4

1 に答える 1

0

すみません。あなたのコードが何を達成しようとしているのか理解できないと思います。ただし、このバッチ セグメントは「各ファイルから最初の 6 文字を抽出し、txt ファイルに書き込みます」:

(for %%I in (*.*) do (
   set str=%%I
   echo !str:~0,6!
)) > file.txt

ファイル名ごとに >> 追加操作を使用するよりも、FOR コマンド全体を括弧で囲み、単一の > リダイレクト操作を使用する方が効率的です。

于 2012-11-27T18:43:45.813 に答える