質問と問題を長時間蓄積して解説してください。完全な質問を最初に見るには、以下のヘッダーを参照してください。複数のディレクトリにあるファイルを数える
私が書いているバッチファイルは、特定のファイルを自動的に移動するためのものです。基本的には、インターネットに接続されたネットワークと内部ネットワークで隔離された2つのネットワークがある場所を設定しています。これらの2つのネットワーク間でファイルを移動するには、ユーザーはサーバー上の自分専用のフォルダーにファイルを置いて、そのファイルを外部ドライブにプルして別のネットワーク上のマシンに物理的に移動させ、他のネットワークはありません。ここで
を移動するプロセスここでファイルを移動するバッチファイル(関連部分は)だの安っぽい絵です。このスクリプトは、フォルダ間でファイルを移動するだけでなく、移動を待っていたすべてのファイルのログも生成します。
@echo off
rem Copies the contents of the external drive to the "AlreadyMoved" folders
dir /b /s /a:d "\\SERVER\Path\Users\*AlreadyMoved" | for /f "delims=\; tokens=3,4,5*" %%a in ('findstr AlreadyMoved') do @xcopy /i /s /y "E:\%%b" "\\SERVER\Path\%%a\%%b\%%c\"
set folder="E:\"
cd /d %folder%
IF EXIST "E:\" (
goto :DRIVECLEAN
) ELSE (
echo ERROR: "%folder%" DRIVE NOT CONNECTED!
echo(
echo(
echo PLEASE CONNECT %folder% DRIVE AND TRY AGAIN.
exit /b)
:DRIVECLEAN
set folder="E:\"
rem echo This will wipe the %folder% drive clean!
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
rem gets the current date and time in 24 hr format for the text file name.
set hh=%time:~-11,2%
set /a hh=%hh%+100
set hh=%hh:~1%
set dateseed=%date:~10,4%_%date:~4,2%_%date:~7,2%_%hh%%time:~3,2%
set output="%userprofile%\Desktop\Folder\%dateseed%.txt"
rem creates contents of the log file
echo File Header >> %output%
echo(>> %output%
echo Scanned By: %username% >> %output%
echo Date Scanned: %mydate% >> %output%
echo Time Scanned: %mytime% >> %output%
echo(>> %output%
rem echoes the File Name, Size, and Last Modified date in the log file
for /f "delims=" %%F in (
'dir /b /s \\SERVER\Path\Users ^| findstr ToBeMoved\'
) do for /f "delims=\; tokens=3,4,5*" %%a in ("%%F") do echo %%b: %%d -- Size: %%~zF bytes -- Last Modified: %%~tF >> %output%
rem copies the contents of the "ToBeMoved" folders to the External Drive
dir /b /s /a:d "\\SERVER\Path\Users\*ToBeMoved" | for /f "delims=\; tokens=3,4,5*" %%a in ('findstr ToBeMoved') do @xcopy /i /s /y "\\SERVER\Path\%%a\%%b\%%c" "E:\%%b\"
pause
このすべては、このようになりますログファイルに結果:
File Header
Scanned By: username
Date Scanned: 12-08-2016
Time Scanned: 01:03 PM
Last, First1: FileName1.ext -- 10000 bytes -- Last Modified: 12/08/16 2:50 PM
Last, First1: FileName2.ext -- 10000 bytes -- Last Modified: 12/08/16 2:55 PM
Last, First2: FileName3.ext -- 10000 bytes -- Last Modified: 12/08/16 2:50 PM
Last, First2: FileName4.ext -- 10000 bytes -- Last Modified: 12/08/16 2:55 PM
質問はここから始まります!
それで、非常に長い風が吹き荒れた後、ここに質問があります。
私はこのように見えるように、テキストファイルを取得したい:
File Header
Moved By: username
Date Moved: 12-08-2016
Time Moved: 01:03 PM
Last, First1
FileName1.ext -- 9 KB -- Last Modified: 12/08/16 2:50 PM
FileName2.ext -- 9 KB -- Last Modified: 12/08/16 2:55 PM
Total Moved: 2 Files
Last, First2
FileName3.ext -- 9 KB -- Last Modified: 12/08/16 2:50 PM
FileName4.ext -- 9 KB -- Last Modified: 12/08/16 2:55 PM
FileName4.ext -- 9 KB -- Last Modified: 12/08/16 2:56 PM
Total Moved: 3 Files
あなたはこの1と前回のテキストファイルといくつかの違いが、私がしようとしている重要な違いがありますわかります特定のユーザーの "ToBeMoved"フォルダー内のファイル数を数える方法です。
バッチで明白なカウント機能がないことに気付きましたが、ディレクトリ内のファイル数をカウントする方法がいくつか見つかりましたが、これらのスクリプトを実際に実装する方法がわかりません。爆破する
明らかな解決策は、ログファイルの内容を出力する同じループ内でカウントを実装することです。それ以外の場合、私はどのように私はすべてのユーザーの情報を一緒に保持するか分からない。つまり、私が持っているループはすでに私を一緒に束ねるために私を永遠に連れてきました(私はバッチの専門家ではありません)。そして、私はこれらのループに複雑な追加を加える方法をあわてていません。
というボーナスが追加されています(これはこの質問の対象とは完全には関係ありませんが、これらの問題について誰かが助けてもらえない場合は反対しません)。それを理解していないと、私はおそらく別々の質問をしなければならないでしょう)私はサイズの値のいくつかの変換を行い、改行を加えることができる必要があります。
私はこれをどのように達成できるか考えてもらえますか?または、少なくとも正しい方向に私を向ける?
EDIT:これはelzooilogicoの回答に対応しています。私は彼が提案した変更を実装し、コードはエラーなしで実行されましたが、テキストファイルは正しくフォーマットされていません。いくつかのフォルダにいくつかのテストファイルを置いて、何が起こるべきか見てみましょう。
私はこのような何か得ている必要があります。彼は書いたループは、上記の間違いであるため、今では私が何とか間違ってそれを実現している可能性があり
File Header
Moved By: username
Date Moved: 12-09-2016
Time Moved: 10:30 AM
Last,First1
Last,First1
Last,First1
Last,First1
Last,First2
Last,First2
Last,First2
FileName1.ext -- Size: 103 bytes -- Last Modified: 12/09/2016 10:25 AM
FileName2.ext -- Size: 463 bytes -- Last Modified: 12/09/2016 09:28 AM
FileName3.ext -- Size: 463 bytes -- Last Modified: 12/09/2016 09:29 AM
FileName4.ext -- Size: 531 bytes -- Last Modified: 12/09/2016 09:31 AM
FileName5.ext -- Size: 531 bytes -- Last Modified: 12/09/2016 09:31 AM
FileName6.ext -- Size: 527 bytes -- Last Modified: 12/09/2016 09:37 AM
FileName7.ext -- Size: 527 bytes -- Last Modified: 12/09/2016 09:42 AM
:代わりに、それはこのように見えた
File Header
Moved By: username
Date Moved: 12-09-2016
Time Moved: 10:30 AM
Last,First1
FileName1.ext -- Size: 1 KB -- Last Modified: 12/09/2016 10:25 AM
FileName2.ext -- Size: 1 KB -- Last Modified: 12/09/2016 09:28 AM
FileName3.ext -- Size: 1 KB -- Last Modified: 12/09/2016 09:29 AM
FileName4.ext -- Size: 1 KB -- Last Modified: 12/09/2016 09:31 AM
Total Moved: 4 Files
Last,First2
FileName5.ext -- Size: 1 KB -- Last Modified: 12/09/2016 09:31 AM
FileName6.ext -- Size: 1 KB -- Last Modified: 12/09/2016 09:37 AM
FileName7.ext -- Size: 1 KB -- Last Modified: 12/09/2016 09:42 AM
Total Moved: 3 Files
を私のスキルレベル。しかし私はそれを自分のコードに直接コピーし、必要に応じて一般的なビットを修正しました。
最終編集:これは完璧に機能するため、最初は間違っていたはずです。バッチ・ロジックがうまく動作した場合
を使用することができsentitive ...私は夜に多くのコーヒーが必要だと思いますこれはすばらしく、私のスキルレベルをはるかに上回っています。うまくいけば、単にそれを実装していないだけです。 私は、ユーザ名、ファイル名、サイズ、および変更日を追加したビットで生成する元のコードブロックを置き換えました。しかし、それは間違いなく実行されましたが、私が試していたものを得られませんでした。出力する内容を編集します。 また、変更したビットは、出力が1回だけ書き込まれるのが大好きです。私はあなたがそれを行うことができるのか分からず、ここからその方法を間違いなく使用するつもりです。 – Neal
はコンピュータの前にはありませんが、前のスクリプトが正常に実行されている場合は、これがジョブを実行するはずです。変更されたコードブロックの前に*エコーを置くことをお勧めします。* rem *リダイレクションラインと終了マッチング括弧は、forの中にポーズを入れます。* for * iterationごとに何が起こっているか見ることができます。 – elzooilogico
もう一度入れてみました。今は完璧に動作するので、何かを混乱させてしまったに違いない!ありがとうございました!あなたは基本的にバッチイエスです。 – Neal