2009-05-25 16 views
2

私は例として、このコードを検討し、ユーザー入力されたファイルからディレクトリ情報を抽出する方法を知っておく必要があります:私は% txtfile%からファイルパスを抽出し、ここではなかったので、うまくいきませんでした[NTバッチ]ユーザー入力ファイルからディレクトリを取得する方法は?


ECHO Drag and drop your .txt file here, after that press Enter: 
SET txtfile= 
SET /P txtfile= 
ECHO. 
CD %txtfile% 

ofcourseのサンプル出力私がしたい:次のように

 
C:\>Drag and drop your .txt file here, after that press Enter: 
C:\somefolder\somesubfolder\somefile.txt 
C:\>Press Enter to continue... 

C:\somefolder\somesubfolder\> 

通知は、それはあなたが完全なパスを抽出することができます変更、それは作業ディレクトリ

答えて

2

を持っている:

@echo off 
setlocal 
echo Drag and drop your .txt file here, after that press Enter: 
set txtfile= 
set /p txtfile= 
echo. 
for %%i in (%txtfile%) do set txtdir=%%~dpi 
for %%i in (%txtfile%) do set txtfil=%%~nxi 
cd /d %txtdir% 
dir %txtfil% 
endlocal 

最初のfor文はドライブとパスを取得し、2番目のfor文はファイル名と拡張子を取得します。私はcd /dを使ってドライブディレクトリを変更し、setlocal/endlocalを使用してスクリプト外のパスを保存しました(気にしない場合は削除できます)。

「〜/?」を実行すると、すべての〜修飾子が見つかります。コマンドウィンドウに表示されます。これは本当に強力なコマンドであり、これらの修飾子は "for"に限定されず、スクリプトに対する%1タイプの引数でも使用できます。

+0

偉大な仕事:Dのおかげ – Dels

1
ECHO Drag and drop your .txt file here, after that press Enter: 
SET txtfile= 
SET /P txtfile= 
ECHO. 
CD %txtfile%\.. 

私は本当に理由はわかりませんが、これはXPで動作し、NTでも動作します。これに対する答えは...

paxdiabloが正しい道の上にいた一人が言ったことを取って、それを修正することにより使用され

+1

XPで脳死cdコマンドは、単純なテキスト置換を行いますので、それは動作します"を削除してください。"と ".."エントリ。誰がマイクロソフトの間違いを突きつけて、いつか役に立つと思うだろうか?XPで – paxdiablo

+0

が働いてくれてありがとうございましたNTについて – Dels

0

、しかしそれはpasteable /コピーではありません。彼が正しく動作するには(Windows7を実行している私にとっては多分)、2つのファイルが必要です。

最初のファイル:

@echo off 
echo Drag and drop your .txt file here, after that press Enter: 
set txtfile= 
set /p txtfile= 
echo.%txtfile% 
call c:\temp\process_filename.bat %txtfile% 

第二のファイルdrag_drop.bat:process_filename.bat

FOR %%i in (%txtfile%) do set txtdir=%~dp1 
cmd /K "cd %txtdir%" 

私は2つのファイルを使用しなければならなかった理由がある%〜DP1のトリガー(そのため、構文はpaxdiabloから間違っていました - 私はあなたが187kの代理人を持っていることを知っています。私はあなたに小道具を与えています[%%〜dpi、特殊文字 '%'を無効にするために%%はエコーで使用され、dp1はデリムですファイル名から引用符を取り除くことができます。同じことが%%〜nxiにあります])

とにかく、他のファイル名を渡してバッチファイルを呼び出す必要があります。これは2番目のものです。これは必要な情報を取り除き、そのパスにアクセスしてから、そのディレクトリをcmdプロンプトで開きます。

代わり

あなたが同じファイルからこれを行うことができます...

@echo off 
setlocal 
IF '%process%'=='1' goto processFile 
echo Drag and drop your .txt file here, after that press Enter: 
set txtfile= 
set /p txtfile= 
echo.%txtfile% 
set process=1 
call c:\temp\dragdrop.bat %txtfile% 

:processFile 
set txtdir= 
FOR %%1 in (%txtfile%) do set txtdir=%~dp1 
cmd /K "cd %txtdir%" 
endlocal 
+2

_paxdiablo_の構文が間違っていました。いいえ、paxdiaboloのサンプルの構文は正しいです。構文が間違っているか、少なくとも難読化されています。あなたは%% iを宣言していますが、%1を使用しています(この場合、 '%〜dp1'は動作します)が、' %%〜dpi'を使うべきです。 – jeb

+0

ありがとう、私はまた、これを修正する別のエラーを見つけました...最後に近いcmd行に/ Kを追加すると、ディレクトリスイッチを有効にすることができます。 – rud3y

関連する問題