私は、作業ディレクトリとサブディレクトリにあるすべてのファイル.txt
を再帰的にループし、そのファイルで何かを実行するスクリプトを持っています。今私はexclude.txt
ファイルにリストされている特定のサブディレクトリ内のすべてのファイルを除外したいと思います:作業ディレクトリからの相対パスを取得する方法は?
@ECHO OFF
SETLOCAL EnableDelayedExpansion
for /r %%f in (*.txt) do (
CALL:processFile %%f %%~df%%~pf
)
GOTO:EOF
:processFile
SET file_=%~1
SET path_=%~2 <- %%~df%%~pf is the full path :(
find "!path_!" exclude.txt
IF !ERRORLEVEL! EQU 1 (
REM do something here
)
GOTO:EOF
しかし、%%/~df%%~pf
は絶対パスに展開されます。 作業ディレクトリからの相対パスはどのように取得できますか?サブディレクトリのみをexclude.txt
に、完全なパスは表示しません。
PS:私はもちろん、exclude.txt
からの相対パスを読ん%cd%
を追加し、いくつかのexclude.temp
に書き込み、その後、この一時ファイルで検索、私はよりよい方法があると思いますができます。
FORコマンド内でGOTOを使用することはできません。 – Squashman
思考プロセスを逆転させます。 FINDSTRを使用して、/ Gオプションを使用します。除外テキストを検索文字列として使用します。 'echo %% F | findstr/G:exclude.txt'です。そのコードの変更に関わらず、FORコマンドコードブロック内でGOTOを使用することはできません。 – Squashman
@Squashman ups not noticeは、スクリプトを1つのファイルでしかテストしていないためです。私はそれを変更しました、今は大丈夫だと願っています – user463035818