2017-07-21 6 views
0

拡張子が001 = 159のファイルをループする必要があります。このディレクトリをループして変数を設定するfor/Lループを作成しました。問題は、プログラムが動作しないように変数を設定しないことです。どんな助けもありがとうございます。Windowsのバッチファイル:Lループの変数がトラッキングされていない

ECHO ON 
SET LOCAL ENABLEEXTENSIONS 
SET LOCAL ENABLEDELAYEDEXPANSION 

chdir /d D: 
SET /P practice="Enter Practice 3 letters " 
SET String=%Practice% 
CALL :UpCase String 
SET String 
echo String 
pause 
SET /P FileNumber="Enter Amount of files " 


SET /P year="Enter Year " 
SET /P typeSet="Enter 1-NoConvert 2-NeedConvert " 
if %typeset% equ 1 set Type=NoConvert 
if %typeset% equ 2 set Type=NeedConvert 

set /P WaveType="Enter Wave Number " 
set wave=Wave%waveType%Documents 
echo FileNumber %FileNumber% 
pause 
FOR /L %%i IN (1,1,%FileNumber%) DO (
echo %%i 
set Ext=_00%%i 

pause 

set src_folder=D:\ 
set index=Index_%String%_%year%_%type%_%Ext%.idx 

echo indexFile %index% 
echo %wave% 

if not exist D:\ChartMaxx\%wave%\%String%_%year%_%type%_%Ext% mkdir 
D:\ChartMaxx\%wave%\%String%_%year%_%Type%_%Ext% 
set dst_folder=D:\ChartMaxx\%wave%\%String%_%year%_%Type%_%Ext% 


) 
@REM End For L Loop 

:UpCase 
:: Subroutine to convert a variable VALUE to all UPPER CASE. 
:: The argument for this subroutine is the variable NAME. 
FOR %%i IN ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" 
"k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" 
"w=W" "x=X" "y=Y" "z=Z") DO CALL SET "%1=%%%1:%%~i%%" 
GOTO:EOF 
+2

'SET LOCAL ENABLEEXTENSIONS'と' SET LOCAL ENABLEDELAYEDEXPANSION'は、コマンドプロンプトウィンドウ内からバッチファイルを実行するとエラーメッセージを表示します。正しいコマンドは 'setlocal EnableExtensions EnableDelayedExpansion'です。コマンドプロンプトウィンドウ 'help 'で実行すると、標準のWindowsコマンドのリストが出力されます。 'set /?'、 'setlocal /?'、 'endlocal /?'を実行すると、これらの3つのコマンドのヘルプが1つ以上のウィンドウページに出力されます。 – Mofi

+2

コマンドライン 'choice/C 12/N/Mを使用する 'NoConvertの場合は1、NeedConvertの場合は2を入力し、次の行' errorlevel 2の場合( "Type = NeedConvert"を設定)、それ以外の場合( "Type = NoConvert"を設定)。これらの2つのコマンドのヘルプについては、コマンドプロンプトウィンドウ 'choice /?'と 'if /?'で実行してください。 – Mofi

+2

__FOR__ループでは、コマンドブロック内の環境変数の定義/変更に必要な遅延拡張を使用するために '%Ext%〜'の代わりに '_!Ext:〜-3! 'を使用する必要があります。その数字の最後の3文字は実際に「001」から「159」になります。コマンドライン 'set Ext = _00 %% i'は' set Ext = 00%i'に変更する必要があります。バッチコード全体を修正するのに十分な助けとなるはずです。バッチコードを改善するために必要なものが何千も書かれているので、 '[batch-file]'というタグでスタックオーバーフローを検索してください。 – Mofi

答えて

0
FOR /L %%i IN (1,1,%FileNumber%) DO (
    SET Ext=00%%i 
    pause 
    set index=Index_%String%_%year%_%type%_!Ext:~-3!.idx 
) 

結果:set index=Index_GLP_2014_NeedConvert_!Ext:~-3!.idx

_!Ext:~-3!ショーの代わり001

+0

'set index = Index_GLP_2014_NeedConvert_!Ext:〜-3!.idx'が出力されています__before__これは既に実行されているコマンドラインが実行されています。実際に次のコマンドを実行すると'!Ext〜-3! 'が展開されて__delayed__ 。 'echo!index!'または 'set index'でもう一つの行を挿入すると、変数' index'に実際にコマンド__set__の実行が__after__していることがわかります。 – Mofi

0

(私はいくつかの膨らみを削除しました)をご覧ください。

@ECHO OFF 
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 

SET /P "String=Enter Practice 3 letters " 
CALL :UpCase String %String% 

SET /P "FileNumber=Enter Amount of files " 

SET /P "year=Enter Year " 

CHOICE /C 12 /M "1. NoConvert, 2. NeedConvert" 
IF ERRORLEVEL 2 (SET "Type=NeedConvert") ELSE SET "Type=NoConvert" 

SET /P "WaveType=Enter Wave Number " 
SET "wave=Wave%WaveType%Documents" 

FOR /L %%i IN (1,1,%FileNumber%) DO (
    SET "Ext=_00%%i" 
    SET "index=Index_%String%_%year%_%Type%_!Ext!.idx" 
    SET "dst_folder=D:\ChartMaxx\%wave%\%String%_%year%_%Type%_!Ext!" 
    IF NOT EXIST "!dst_folder!\" MD "!dst_folder!" 
) 

EXIT/B 

:UpCase 
FOR %%i IN ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" 
    "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" "w=W" 
    "x=X" "y=Y" "z=Z") DO SET "%1=!%1:%%~i!" 

あなたがチェックする必要があるかもしれない唯一のもの/変更はExt変数の前に追加_を必要とするかどうかです。おそらくSET "Ext=00%%i"がそれを修正します。

+0

これはすごくうまくいった。ループがFileNumberに到達したときにループが繰り返されるため、exit/Bをループ内に変更しました。私はあなたの助けに感謝20時間を過ごした。 – user2576682

関連する問題