バッチの問題 - フォルダーの作成とドキュメントの移動

バッチの問題 - フォルダーの作成とドキュメントの移動

私は、数百の 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%"

関連情報