@ECHO OFF
SETLOCAL
:: Note that SPACES are significant in simple SET statements
:: Set relative or local root (start-point of subtree to scan)
:: Use normal then safemethod 1 then safemethod2 - all do the same thing
:: Note : from the prompt,
:: command /?
:: will generally show help...
SET relroot=c:\wherever
(SET relroot=c:\wherever)
SET "relroot=c:\wherever"
:: repeat for destination directory
SET "destdir=c:\destination"
::
:: Read Artist
:: Make sure ARTISTS has no existing value, then prompt for input
::
:again
(SET artist=)
SET /p artist="Artist ? "
::
:: Check for input, exit if none
:: Note :EOF is a special predefined label meaning "END OF FILE"
:: character case is generally insignificant
::
IF NOT DEFINED artist GOTO :eof
::
:: make a new directory
:: the 2>nul suppresses an error message like 'it already exists'
:: In quotes in case variables contain spaces
MD "%destdir%\%artist%" 2>nul
::
:: Now look for filenames containing the data entered
:: Note: here, the metavariable %%i IS Case-sensitive
:: >nul means 'don't show message like '1 file(s) moved'
FOR /f "delims=" %%i IN (
' dir /s /b /a-d "%relroot%\*%artist%*" '
) DO (
ECHO %%i
IF EXIST "%destdir%\%artist%\%%~nxi" (
ECHO Cannot MOVE "%%i" because "%destdir%\%artist%\%%~nxi" exists
) else (ECHO MOVE "%%i" "%destdir%\%artist%\%%~nxi" >nul)
)
GOTO again
さて、これがスターター スクリプトです。アーティストの名前がファイル名に含まれていると仮定します。
ほとんどのドキュメントはインラインです。
::...
ドキュメントの形式は実際には壊れたラベルであり、ループや括弧で囲まれたコード内では一般に推奨されないことに注意してください-そこでREMを使用してください。ただし、入力しやすく、邪魔にならない
FOR
ループには少し説明が必要です。その多くは、ドキュメントから少し永続化することで解読できます。
for /?
プロンプトから。しかし、ヘッズアップは次のとおりです。
for /f
「ファイル」を 1 行ずつ読み取り、区切り文字間でトークン化された後、連続する各行をメタ変数に適用します。delims=
トークンは 1 から数えて数で指定でき、区切り文字はと閉じ引用符の間にある任意の文字です。デフォルトの区切り文字は [スペース]、[タブ]、[カンマ]、[セミコロン] で、デフォルトのトークンは1
です。「delims=」は区切り文字がないことを指定しているため、行全体がメタ変数に適用されます。
、 、に適用するために使用するなど、Wed. 07/11/2012
データ行でこの機能を使用することができます- トークンは、であり、行が [スペースまたは] を使用してトークン化され、2 番目のトークンがループ メタ変数に適用されると、トークン番号のリストの3 番目から 3 番目まで。特別なトークン " " は、「指定された最大数のトークンに続く行の残り」を意味します。FOR/f "tokens=2,3,4delims=/ " %%i in...
07
%%i
11
%%j
2012
%%k
Wed.
07
11
2012
/
%%i
%%j
*
AND.. 一重引用符で囲まれた「ファイル名」は、コマンドの出力です。基本形式dir /s /b /a-d "%relroot%\*%artist%*"
のディレクトリリスト (ファイル名のみ)サブディレクトリをスキャンしますが、%relroot% で始まり、ファイル名のどこかに %artist% を持つwarディレクトリ名については言及しません。スペースが存在する場合はすべて引用符で囲みます。/b
/s
/a-d