私は、数百の PDF の最初の 6 つの数字を調べ、6 つの一意の数字に基づいてフォルダーを作成し、PDF をそれぞれのフォルダーに移動するバッチ スクリプトを Windows 7 で作成しようとしています。(同じ 6 つの一意の数字を持つ .pdf がいくつかあります)
以下のバッチは、私の場合はほぼうまくいきます。6 つの固有の番号の pds ごとにフォルダーを作成しますが、すべてのドキュメントを移動しません。例: 次の操作は 100036 フォルダーに移動します。100036.pdf が移動し、1000361.pdf が移動します。1000361copy が移動します。
ファイル名にスペースが含まれている場合、100036フォルダに移動されません。100036-1.pdf、100036-copy.pdfは移動されません
これを修正する方法はありますか?
よろしくお願いします:
@echo off
REM This script creates folders based on file names and moves those files into the folders.
REM *.pdf is the search term. Change this to search for different files.
REM md %name:~0,6% will make a directory based on the first 6 characters of the file name. Change to 5% for the first 5 characters.
REM move %* %name:~0,6% will move the file to the directory based on the first 6 characters of the file name. Change to 5% for the first 5 characters.
for /f %%F in ('dir/b/a-d *.pdf') do call :sub1 %%F
goto :eof
:sub1
set name=%1
md %name:~0,6%
move %* %name:~0,6%
編集済み:
@echo off
for /f "tokens=*" %%F in ('dir/b/a-d *.pdf') do call :sub1 %%F
goto :eof
:sub1
set name=%1
md %name:~0,6%
move %* %name:~0,6%
答え1
スペース文字を使用して分割されるためfor /f
、完全なファイル名を処理するには、「tokens=*」オプションを追加する必要があります。
for /f "tokens=*" %%F in ('dir/b/a-d *.pdf') do call :sub1 %%F
アップデート: スペース文字のため、mv を引用符で囲む必要もあります。
move "%*" "%name:~0,6%"