2012-02-12 20 views

答えて

60
@echo off 
Set filename=C:\Documents and Settings\All Users\Desktop\Dostips.cmd 
For %%A in ("%filename%") do (
    Set Folder=%%~dpA 
    Set Name=%%~nxA 
) 
echo.Folder is: %Folder% 
echo.Name is: %Name% 

しかし、私はこのために信用を取ることはできません。

cd c:\test\folder A
for %X in (*)do echo %~nxX

(desktop.iniをのような特別なファイルに注意してください:Googleは、例えば、CMDウィンドウに直接それを行う単一%を使用するように、上記のピートの例から引き続きhttp://www.dostips.com/forum/viewtopic.php?f=3&t=409

+1

おかげ!これも私のために働いた。私は、ファイルからフォルダのリストを読み込み、それらをフォーマットしています。私はこれを使いました: "for/F" tokens = 1 delims = "%% A in(list_of_files.txt)do(" –

+0

ファイル名を取得する方法を示すのがいいかもしれません。(拡張子なし) – Vaccano

+2

%〜 nI - %Iをファイル名のみに展開する< - DOSから直接取り出して "-help"を出力する –

0

バッチファイルについてはそれほどよく分かりませんが、あらかじめ作成されたバッチファイルをホームディレクトリからパスにコピーして、ファイル名のリストを返すことはできません名?

あらかじめ作成されたバッチファイルの作成に役立つと思われるリンクがあります。

http://www.ericphelps.com/batch/lists/filelist.htm

4
@echo off 
Set filename="C:\Documents and Settings\All Users\Desktop\Dostips.cmd" 
call :expand %filename% 
:expand 
set filename=%~nx1 
echo The name of the file is %filename% 
set folder=%~dp1 
echo It's path is %folder% 
0

でこれを見つけました表示されません)

それは>>を使用して出力をファイルにリダイレクトすることも可能です:。

本当例えば210

、フォルダ-B(非再帰的)にフォルダ-Aからすべてのファイルをrobocopyをしたいと仮定すると:

cd c:\test\folder A 
for %X in (*)do robocopy . "c:\test\folder B" "%~nxX" /dcopy:dat /copyall /v>>c:\test\output.txt

、すべてのフォルダ(再帰的に)のために:

cd c:\test\folder A 
for /d %X in (*)do robocopy "%X" "C:\test\folder B\%X" /e /copyall /dcopy:dat /v>>c:\test\output2.txt
+0

これらの手法をrobocopyで使用すると、ソースディレクトリの最後のバックスラッシュを削除することを覚えておく必要があります。ソースとして '%〜dpX'を使用した例があれば便利です。 – Annan

12

完全修飾パス名からファイル名を解析し(例えば、C:\一時\のmy.bat)任意の構成要素(例えば、FILE.EXT)へ。

単一のコード行:

For %%A in ("C:\Folder1\Folder2\File.ext") do (echo %%~fA) 

あなたが "C:\ Folder1に\フォルダ2 \ FILE.EXT" アウトに変更することができます任意のフルパスおよび変更のための "%%〜fAとを" "for /?"を実行すると他のオプションのいずれかが見つかります。コマンドプロンプトで確認します。

精緻コード

set "filename=C:\Folder1\Folder2\File.ext" 
For %%A in ("%filename%") do (
    echo full path: %%~fA 
    echo directory: %%~dA 
    echo path: %%~pA 
    echo file name only: %%~nA 
    echo extension only: %%~xA 
    echo expanded path with short names: %%~sA 
    echo attributes: %%~aA 
    echo date and time: %%~tA 
    echo size: %%~zA 
    echo drive + path: %%~dpA 
    echo name.ext: %%~nxA 
    echo full path + short name: %%~fsA) 

スタンドアロンバッチスクリプト
保存Cのように:\ CMD \ ParseFn.cmd

Cを追加:\ cmdをごPATH環境変数に、あなたのすべての再利用可能なバッチスクリプトを保存するためにそれを使用します。

@echo off 
@echo ::___________________________________________________________________:: 
@echo ::                 :: 
@echo ::        ParseFn        :: 
@echo ::                 :: 
@echo ::       Chris Advena       :: 
@echo ::___________________________________________________________________:: 
@echo. 

:: 
:: Process arguements 
:: 
if "%~1%"=="/?" goto help 
if "%~1%"=="" goto help 
if "%~2%"=="/?" goto help 
if "%~2%"=="" (
    echo !!! Error: ParseFn requires two inputs. !!! 
    goto help) 

set in=%~1% 
set out=%~2% 
:: echo "%in:~3,1%" "%in:~0,1%" 
if "%in:~3,1%"=="" (
    if "%in:~0,1%"=="/" (
    set in=%~2% 
    set out=%~1%) 
) 

:: 
:: Parse filename 
:: 
set "ret=" 
For %%A in ("%in%") do (
    if "%out%"=="/f" (set ret=%%~fA) 
    if "%out%"=="/d" (set ret=%%~dA) 
    if "%out%"=="/p" (set ret=%%~pA) 
    if "%out%"=="/n" (set ret=%%~nA) 
    if "%out%"=="/x" (set ret=%%~xA) 
    if "%out%"=="/s" (set ret=%%~sA) 
    if "%out%"=="/a" (set ret=%%~aA) 
    if "%out%"=="/t" (set ret=%%~tA) 
    if "%out%"=="/z" (set ret=%%~zA) 
    if "%out%"=="/dp" (set ret=%%~dpA) 
    if "%out%"=="/nx" (set ret=%%~nxA) 
    if "%out%"=="/fs" (set ret=%%~fsA) 
) 
echo ParseFn result: %ret% 
echo. 

goto end 
:help 
@echo off 
:: @echo ::___________________________________________________________________:: 
:: @echo ::                 :: 
:: @echo ::       ParseFn Help       :: 
:: @echo ::                 :: 
:: @echo ::       Chris Advena       :: 
:: @echo ::___________________________________________________________________:: 
@echo. 
@echo ParseFn parses a fully qualified path name (e.g., c:\temp\my.bat) 
@echo into the requested component, such as drive, path, filename, 
@echo extenstion, etc. 
@echo. 
@echo Syntax: /switch filename 
@echo where, 
@echo filename is a fully qualified path name including drive, 
@echo folder(s), file name, and extension 
@echo. 
@echo Select only one switch: 
@echo  /f - fully qualified path name 
@echo  /d - drive letter only 
@echo  /p - path only 
@echo  /n - file name only 
@echo  /x - extension only 
@echo  /s - expanded path contains short names only 
@echo  /a - attributes of file 
@echo  /t - date/time of file 
@echo  /z - size of file 
@echo  /dp - drive + path 
@echo  /nx - file name + extension 
@echo  /fs - full path + short name 
@echo. 

:end 
:: @echo ::___________________________________________________________________:: 
:: @echo ::                 :: 
:: @echo ::       ParseFn finished       :: 
:: @echo ::___________________________________________________________________:: 
:: @echo. 
[変数からバッチ抽出パスとファイル名]の
関連する問題