1

ワイルドカードを使用してファイルの特定のグループを、グループのファイル名で作成されたフォルダーに移動しようとしています。ファイルの名前は「events.txt」に保存されています。私のバッチファイルは最後の行まで実行されています。構文が正しくないことが表示されます。

echo off
for /F "tokens=*" %%A in (events.txt) do call :makemove %%A
pause 
exit

:makemove
set f=%1
set file=%f:~0,-4%  
md X%file%
set dest=C:\Users\sony\Desktop\X%file%
move /y "C:\Users\sony\Desktop\*%file%*.*" "%dest%"  
4

2 に答える 2

2

後に空白文字があるようです

set file=%f:~0,-4%

ライン。

これにより、スクリプトの最後の行が次のように評価されます

move /y "C:\Users\sony\Desktop\*foobar  *.*" "C:\Users\sony\Desktop\Xfoobar  "

パスを台無しにします。

于 2012-06-15T12:32:08.103 に答える
2

Helbrederが指摘したように、の後にスペースがありset file=%f:~0,-4%ます。
このタイプの問題を回避するには、の拡張構文を使用できますSET

set "file=%f:~0,-4%"

周囲の引用符は、最後の引用符までのすべての文字のみが文字列の一部になるようにします。
引用符自体は文字列の一部ではありません。

だからこれでもうまくいくだろう

set "file=%f:~0,-4%"    the spaces and this text will be removed

引用符によるもう1つのプラスの効果は、ファイル名の特殊文字に関する問題を回避できることCat&Dogです。

したがって、コードは次のようになります。

@echo off
for /F "tokens=*" %%A in (events.txt) do call :makemove %%A
pause 
exit

:makemove
set "f=%~1"
set "file=%f:~0,-4%"
md "X%file%"
set "dest=C:\Users\sony\Desktop\X%file%"
move /y "C:\Users\sony\Desktop\*%file%*.*" "%dest%"
于 2012-06-18T04:33:45.650 に答える