2011-01-11 14 views
3

フォルダ内のすべてのテキスト文書に対してバッチスクリプトが必要です。 これは私がこれまで管理してきたものである:私は出力たいことはあるバッチスクリプト内のファイル名をループする

@ECHO off 
title Test 
set dir1=C:\Users\Family\Desktop\Example 

:Start 
cls 
echo 1. test loop 
echo 2. Quit 
set /p choice=I choose (1,2): 
if %choice%==1 goto test 
if %choice%==2 exit 

:test 
cls 
echo running loop test 
FOR %%n in (%dir1% *.txt) DO echo %dir1%\%%n 
echo Done 
pause 

running loop test 
C:\Users\Family\Desktop\Example\doc 1.txt 
C:\Users\Family\Desktop\Example\doc 2.txt 
Done 

しかし、私はこの取得:

running loop test 
C:\Users\Family\Desktop\Example\C:\Users\Family\Desktop\Example 
C:\Users\Family\Desktop\Example\doc 1.txt 
C:\Users\Family\Desktop\Example\doc 2.txt 
Done 

答えて

11

を主な問題は、ように見えます間のスペース(%dir1%* .txt)

可能性があります

@ECHO off 
title Test 
set "dir1=C:\Users\Family\Desktop\Example" 

:Start 
cls 
echo 1. test loop 
echo 2. Quit 
set /p choice=I choose (1,2): 
if %choice%==1 goto test 
if %choice%==2 exit 

:test 
cls 
echo running loop test 
FOR %%X in ("%dir1%\*.txt") DO echo %%~dpnX 
echo Done 
pause 

引用符は、パス内のスペースやその他の特殊文字の問題を避けるためのものです。

EDIT:
%%~dpnX%%X =ドライブ(C :)
p =パス(\ Users \ユーザーファミリー\デスクトップ\例)
n =ファイル名(d
へのファイル名を拡張するためのものですtest1)(拡張子なし)

f =完全なファイル名(C:\ Users \ Family \ Desktop \ Example \ test1.txt)。

可能な修飾語はここで説明されていますFOR /?

+0

ありがとうございました。 %%〜dpfXを私に説明できますか? – Krayons

+3

'%%〜nX'ファイル名(test1)、拡張子が' %%〜nxX'(test1.txt)のファイル名。 – hlcs

+1

明確にする:彼のコードでは、 '%% X'は見つかったファイル名全体であることに注意してください。他の '〜dpn 'は' %% X'の修飾子です。だから、2番目のユーザが言ったように、変数の '〜n'修飾子を使って、' echo %%〜nX'を呼び出すだけでファイルを出力します –

関連する問題