2011-12-08 20 views
1

私は与えられたテンプレートを使用してファイル名を表示する必要があります。私は、次のコードを書いている:バットでのファイルの操作

if "%2" == "" (
    echo "Missing second argument!" 
    set /p FileName="Input file name template ('*', '?' are allowed): " 
    set /p FileType="Input file type ('text', 'bat', 'all' only): " 

    if FileType == "all" (set FileType = "*") 
) else (
    set FileType="%2" 
) 


echo %DirSearch%\%FileName%.%FileType% 

for %%i in (%DirSearch%\%FileName%.%FileType%) do (echo "Thats it: %%i") 

2番目の引数が空の場合は「すべて」への等しいが、私はそれが「*」としての価値だ書き換える場合、私は、ファイル名テンプレート、拡張子(約ユーザーに尋ねる

今、最初のトラブルは、それが書き換えられていないということです私は「すべてが」「のFileType」が「*」にそれを設定した後「すべて」のままで置くとき、なぜ

そしてエコーが現れます:。。?

"C:\Folder"\test.all 
"Thats it: "C:\Folder"\test.all" 

それを単一の値として宣言し、forで使用しますか?


新コード:

if "%2" == "" (
     ... 
    if "%FileType%" == "all" (set FileType=*) 
) else (
     ... 
) 

set result=%DirSearch%\%FileName%.%FileType% 
echo %result% 

for %%i in (%result%) do (echo "Thats it: %%i") 


// echo %result%: 
"C:\Data\test"\test.all 
// in for cycle 
"Thats it: "C:\Data\test"\test.all" 

右の文字列は次のようになります。 "C:\ DATA \テスト\のtest.all"

答えて

3

あなたは正しいでFileTypeの値をテストしていません方法。また、新しい値を正しい方法で設定していません。コードはあなただけで、もちろん成功したことがない文字列「のFileType」と「すべて」を、比較している、そうでない場合

if "%FileType%" == "all" (set FileType=*) 

をお読みください。

脇に:DirSearchを設定するコードにも何らかのエラーがあるようです。そこにあるべきではない余分な後続の二重引用符があります。

+0

'FileType'を書き換えても、それがまだ 'すべて'の場合は後で書き換えません。 – Ockonal

+0

@Ockonal: '= 'のまわりに空白を入れてはいけないとわかったので、それに応じて答えを編集しました。また、*設定*するときに値を引用符で囲む必要はありません。 – Jon

+0

大丈夫です、それは今それを置き換えます。しかし、 'for'サイクルのための正しい文字列を生成する方法はありますか? – Ockonal