0

フォルダーのコピーについてサポートが必要ですが、テキスト ファイルで指定された名前のサブフォルダーがコピーされません。テキスト ファイルは次の場所にあります。

U:\ディレクトリ\ディレクトリ\Textfile.txt

テキスト ファイルで指定されているフォルダーをコピーする必要がありますが、ここに問題があります。

U:\Directory\Directory\フォルダにはランダムな名前が付いているため、テキスト ファイルに保存されます。ディレクトリ ツリーの例:

U:\Directory\Directory\"12345"\Pickle <--- 必要なフォルダーは Pickle です。

U:\Directory\Directory\"22345"\Pickle

                     ^ 
                     |

これは、テキスト ファイルで指定されたランダムな名前です。

それらはすべてPickle内部にフォルダーがあり、それが私が求めているものです。テキスト ファイル内には、以下のすべてのフォルダーの名前があります: U:\Directory\Directory\. テキスト ファイルは次のようになります。

1335232 <--- これはランダム フォルダの名前です。

1242334 <--- それらはすべて次の場所にあります。

2342312 <--- U:\ディレクトリ\ディレクトリ\~ここ~

(等...)

フォルダはからコピーする必要がありますU:\Directory\Directory\"12345"\Pickle to U:\Output\

これが役立つ場合、すべてのフォルダーの名前は数字です。ピーター、助けてくれてありがとう。わかりにくかったらごめんなさい。これで問題が解決することを願っています!

4

1 に答える 1

2
@ECHO OFF
SETLOCAL
SET relroot=u:\directory
SET subdir=randomsubfoldername
::
FOR /f %%i IN (
  'dir /b /ad %relroot%\%subdir% ^|findstr /b /e /v /g:textfile.txt '
    ) DO ECHO %relroot%\%subdir%\%%i

このDIRコマンドは、ディレクトリ名 ( /ad) を基本形式 ( .b)、つまり名前のみでリストします。は、ファイル filename 内の行で ( ) 開始 ( ) および終了 ( ) していないfindstr行を検索します ( )/v/b/e/g:filename


改訂された情報で、元の情報が最後から 2 番目のディレクトリ名が同じであり、リーフで選択が行われていることを明確に示していたことに注意してください。単一の例が提供されました...

@ECHO OFF
SETLOCAL
ECHO Here is a test structure
ECHO -----------------------------
DIR /s /b /ad u:\directory
ECHO ------Here is the textfile---------
TYPE u:\directory\textfile.txt
ECHO ====Method 1==============
FOR /f %%i IN (u:\directory\textfile.txt) DO (
DIR /s /b /ad u:\directory | FINDSTR /r ".*\\%%i\\.*" | FINDSTR /v /r ".*\\%%i\\.*\\.*"
)

ECHO ====Method 2==============
FOR /f %%i IN (u:\directory\textfile.txt) DO (
 FOR /f %%s IN (
  'DIR /s /b /ad u:\directory ^| FINDSTR /r ".*\\%%i\\.*" ^| FINDSTR /v /r ".*\\%%i\\.*\\.*"'
 ) DO ECHO selected : %%s
)


ECHO ====Method 3 - to ignore ...\target\subdir that has any subdir ==============
FOR /f %%i IN (u:\directory\textfile.txt) DO (
 FOR /f %%s IN (
  'DIR /s /b /ad u:\directory ^| FINDSTR /r ".*\\%%i\\.*" ^| FINDSTR /v /r ".*\\%%i\\.*\\.*"'
 ) DO (
 FOR /f %%c IN ( 'DIR /a:d %%s ^|FIND /c "<" ' ) DO IF %%c==2 ECHO SELECTED : %%s
 )
)

実行結果は次のとおりです。

Here is a test structure
-----------------------------
u:\directory\another
u:\directory\yetanother
u:\directory\572
u:\directory\another\yetanother
u:\directory\another\yetanother\572
u:\directory\another\yetanother\1572
u:\directory\another\yetanother\5722
u:\directory\another\yetanother\572\wantthis
u:\directory\another\yetanother\572\andthis
u:\directory\another\yetanother\572\maywantthisidontknow
u:\directory\another\yetanother\572\572
u:\directory\another\yetanother\572\maywantthisidontknow\ignore
u:\directory\another\yetanother\1572\ignorethis
u:\directory\another\yetanother\5722\ignorethis
u:\directory\yetanother\572
u:\directory\yetanother\572\wantthis
u:\directory\572\wantthis
------Here is the textfile---------
23
753309
572
====Method 1==============
u:\directory\another\yetanother\572\wantthis
u:\directory\another\yetanother\572\andthis
u:\directory\another\yetanother\572\maywantthisidontknow
u:\directory\another\yetanother\572\572
u:\directory\yetanother\572\wantthis
u:\directory\572\wantthis
====Method 2==============
selected : u:\directory\another\yetanother\572\wantthis
selected : u:\directory\another\yetanother\572\andthis
selected : u:\directory\another\yetanother\572\maywantthisidontknow
selected : u:\directory\another\yetanother\572\572
selected : u:\directory\yetanother\572\wantthis
selected : u:\directory\572\wantthis
====Method 3 - to ignore ...\target\subdir that has any subdir ==============
SELECTED : u:\directory\another\yetanother\572\wantthis
SELECTED : u:\directory\another\yetanother\572\andthis
SELECTED : u:\directory\another\yetanother\572\572
SELECTED : u:\directory\yetanother\572\wantthis
SELECTED : u:\directory\572\wantthis

2 つのFINDSTR正規表現構造は次のとおりです。

FINDSTR /r ".*\\%%i\\.*" 

任意の数の任意の文字、\、ターゲット文字列、\、任意の数の任意の文字

FINDSTR /v /r ".*\\%%i\\.*\\.*"

任意の数の任意の文字、\、ターゲット文字列、\、任意の任意の文字の任意の\数、 、任意の任意の文字の任意の数

しかし- /vFINDSTRの場合は、一致する行を除くことを意味します...


ちょっと意味がわからないcopy the sub-folder from a parent folder with a random name.

要件がそのディレクトリの親ディレクトリから選択したディレクトリにコピーすることである場合は、ターゲットディレクトリが表示されていることを確認したECHO SELECTED : %%sECHO SELECTED : %%s

(
pushd %%s
xcopy ..\* . >nul
popd
)

>nulxcopy レポートを抑制します

それ以外の意味がある場合は、より多くの情報が必要です。

于 2013-03-24T06:51:35.253 に答える