2011-01-11 15 views
1
set a=file 
if exist "folder\%a%" ( 
set /p x= < "folder\%a%" 
echo %x% 
) 

バッチファイルを長時間書き込んでいますが、なぜこのコードが機能しないのですか。 このコードは機能しません。私は %a%の内容をエコーするコードを期待しています。それが返すすべてのECHOの状態BATCH入力リダイレクション演算子

%%(ファイル)がエコー出力することが期待されている文字列(「キーワード」)を含んでいる(エコー ONである)があるとき、%X%

で セット

/私も拡張子(.TXT)を入れてみましたが、それは動作しません

答えて

2

」に設定する前に、完全なカッコブロックは(ともエコー%X%)が評価されているので、まだそれは、動作しません。 p "が実行されると、遅延拡張に変更することができます。

​​

[EDIT]

このコードはまた、これは基本的にジェブと同じコードであるが、ENABLEDELAYEDEXPANSIONは影響しませんファイル名に感嘆符

set "a=folder\foo!bar.txt" 
SETLOCAL EnableDelayedExpansion 
if exist "!a!" (
    set /p x= < "!a!" 
    echo !x! 
) 
+0

遅延拡張とは何を意味しますか? – kapitanluffy

+0

%a%が含まれている場合! (例 "foo!bar.txt")、あなたのコードは、ラインまたはブロックのコマンドが実行される前に、読み込みの瞬間に – Anders

+1

%var%を改行して改行します。遅延拡張を有効にしてから、!var! %var%のようなものですが、行やブロックの各コマンドを実行する直前には、 "set /?"それを説明します – jeb

1
if exist "folder\%a%" ( 
set /p x=< "folder\%a%" 
SETLOCAL ENABLEDELAYEDEXPANSION&echo !x!&ENDLOCAL 
) 

を受け付けパス、ので、ファイル名!まだ動作しません(%はおそらく動作しませんが、バッチファイルとファイル名の一般的な問題です)

set /p x= < .\somefileはハックのビットです。FOR /F "tokens=*" %%A ...を使用するとよいでしょうが、FORは各行を読み込みますDOの中にifを入れない限り。だから、最初の行だけが必要な場合は、このような醜いものになります。

set eof=0 
for /F "tokens=*" %%A IN ('type "folder\%a%" 2^>nul') DO (
    SETLOCAL ENABLEDELAYEDEXPANSION&(if "!eof!"=="0" (echo.%%A))&ENDLOCAL 
    set eof=1 
) 
+0

FORループgoto:labelで改行することができます – jeb

関連する問題