0

コード ベースですべてのjscriptディレクトリを検索し、次のバッチ スクリプトを使用して、それらのディレクトリ内の相対ファイルのリストを取得しようとしています...

@echo off

setlocal enableextensions enabledelayedexpansion

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S jscripts') DO (
    CD %%G
    CD dev

    SET "currentDir=!cd!"
    IF NOT "!currentDir:~-1!"=="\" SET "currentDir=!currentDir!\"

    FOR /r %%F IN (*.js) DO (
        SET "relativePath=%%F"
        SET "relativePath=!relativePath:%currentDir%=!"

        ECHO !relativePath!
    )
)

到達するまで、すべてが期待どおりに機能します...

SET "relativePath=!relativePath:%currentDir%=!"

これをどの形式で書く必要があるかを理解することができます...

c:\dir\jscript\dev\file.js

の中へ...

file.js

助けてください!


追加情報

ディレクトリ設定は以下の通り

dir
    jscripts
        dev
            file.js
            file2.js
        live
            file.js
            file2.js


dir2
    jscripts
        dev
            file.js
            file2.js
        live
            file.js
            file2.js

すべてのjscriptsディレクトリを見つけて、それらにCDを挿入し、devディレクトリに関連するすべてのJSファイルのリストを取得したい

4

2 に答える 2

4

フル パスを含む変数からファイル名と拡張子を抽出するには、次のように使用%~nx0します。

set G=c:\dir\jscript\file.js
echo %~nxG

この回答から同様の質問への以下の引用

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file

The modifiers can be combined to get compound results:
%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only

これは「for /?」からのコピペです。プロンプトでコマンド。それが役に立てば幸い。

関連している

DOS バッチのヒントのトップ 10 (はい、DOS バッチ...)は、 batchparams.batを示してい ます(要旨としてのソースへのリンク):

C:\Temp>batchparams.bat c:\windows\notepad.exe
%~1     =      c:\windows\notepad.exe
%~f1     =      c:\WINDOWS\NOTEPAD.EXE
%~d1     =      c:
%~p1     =      \WINDOWS\
%~n1     =      NOTEPAD
%~x1     =      .EXE
%~s1     =      c:\WINDOWS\NOTEPAD.EXE
%~a1     =      --a------
%~t1     =      08/25/2005 01:50 AM
%~z1     =      17920
%~$PATHATH:1     =
%~dp1     =      c:\WINDOWS\
%~nx1     =      NOTEPAD.EXE
%~dp$PATH:1     =      c:\WINDOWS\
%~ftza1     =      --a------ 08/25/2005 01:50 AM 17920 c:\WINDOWS\NOTEPAD.EXE
于 2013-11-08T09:55:40.033 に答える
1
@echo off
setlocal enableextensions enabledelayedexpansion

rem Where to start
pushd "c:\wherever\global2_root\"

rem Search .....\dev directories
for /f "tokens=*" %%d in ('dir /ad /s /b ^| findstr /e "\\dev"') do (
    rem change to that directory
    pushd "%%~fd"
    echo Now in !cd!
    rem process files inside directory
    for %%f in (*.js) do (
        echo %%f
    )
    rem return to previous directory
    popd
)
rem return to initial directory
popd

rem cleanup 
endlocal
于 2013-11-08T10:18:48.383 に答える