3

状況は次のとおりです。pdf ファイルを含むサブフォルダーが多数あるフォルダーがあります。各サブフォルダーを通過するバッチスクリプトを作成し、100 個を超える場合は pdf ファイルを圧縮したいと考えています (7Zip を使用して、その部分のヘルプを求めません)。

Windows バッチ スクリプトを扱うのはこれが初めてで、非常に落胆しています。私は Google で何時間も費やしてきましたが、この件に関しては私ほど賢明ではないと思います。多くの参考資料とコード例を見つけましたが、例の単語ごとの内訳はそれほど多くありません。この構文は非常に使いにくいと思います。

とにかく、ここに私が持っているものがあります:

@echo off
for /r %%A in (.) do (
set pdfCount = "Code that gets the total number of pdf files in current directory, something like dir *.pdf?"
if pdfCount GEQ 100 (
set beginDate = "Code that gets the date of the oldest pdf, use in the zip file name"
set endDate = "Code that gets the date of the newest pdf, use in the zip file name" 
"Use a 7Zip command to zip the files, I am not asking for help with this code"
DEL *.pdf
echo %pdfcount% files zipped in "Code for current directory"  
)
) 
pause

私の理解では、「for /r %%A in (.) do ()」は、すべてのサブディレクトリでコードを実行することになっています。

4

2 に答える 2

0

これはうまくいくかもしれません。これは破壊的ではなく、atm は 7zip とパラメーターを画面にエコーするだけです。

@echo off
for /f "delims=" %%a in ('dir /b /ad /s') do (
   pushd "%%a"
    for /f %%b in ('dir *.pdf  /b ^|find /c /v "" ') do (
      if %%b GTR 100 echo 7zip a "%%~nxa.7z" "*.pdf"
    )
   popd
)

現在のディレクトリ ツリー内のすべてのフォルダーを取得し、ディレクトリをスタックにプッシュして現在のディレクトリにし、dir と find を使用して PDF ファイルをカウントします。結果が 100 を超える場合は、その行をコンソールにエコーします。そして popd は、ディレクトリをスタックから再びポップします。7z ファイルは、PDF ファイルのあるフォルダーに作成され、folders name.7z場所を指定しない限り、.

于 2013-06-09T15:27:15.060 に答える
0

このスクリプトはロケールに依存します。つまり、マシンで日付と時刻がフォーマットされる方法に依存します。私のマシンはmm/dd/yyyy hh:mm amフォーマットを使用しています。スクリプトは、.zip 形式の名前の zip ファイルを作成しますPDF yyyy_mm_dd yyyy_mm_dd.7z

@echo off
setlocal disableDelayedExpansion
for /r /d %%P in (*) do (
  set "beg="
  set /a cnt=0
  pushd "%%P"
  for /f "eol=: delims=" %%F in ('dir /b /a-d /od *.pdf 2^>nul') do (
    set /a cnt+=1
    set "end=%%~tF"
    if not defined beg set "beg=%%~tF"
  )
  setlocal enableDelayedExpansion
  if !cnt! gtr 100 (
    for /f "tokens=1-6 delims=/ " %%A in ("!beg:~0,10! !end!") do (
      7zip a "PDF %%C_%%A_%%B %%F_%%D_%%E.7z" *.pdf
      del *.pdf
    )
  )
  endlocal
  popd
)
于 2013-06-09T16:13:45.740 に答える