バッチファイルでファイルが正しく移動されない

バッチファイルでファイルが正しく移動されない

数か月前に Windows 7 でバッチ プログラムを作成しました。その基本的な目的は、ダウンロードした内容をファイルの種類に基づいてライブラリ内のさまざまなフォルダーに整理し、Windows Media Player を開くことです (これにより、メディアに Xbox360 からアクセスできるようになります)。Windows 10 にアップグレードした後、バッチ ファイルが完全に機能しなくなりました。ファイルを移動する代わりに、 というエラーが返されるだけですaccess is denied。ファイル構造は変更されていません。コードは次のとおりです。

   echo Organizing Your Videos . . .
        move *.mp4 C:\Users\Devon\Videos
    echo Your Videos have been Organized!
    echo Organizing Your Images . . .
    move *.jpg C:\Users\Devon\Pictures\
    move *.bmp C:\Users\Devon\Pictures\
    move *.gif C:\Users\Devon\Pictures\
    move *.png C:\Users\Devon\Pictures\
    move *.PNG C:\Users\Devon\Pictures\
echo Your images Have Been Organized!
echo ORGANIZATION PROTOCOL COMPLETE!!!
    echo Starting Windows Media Player ...
    echo Waiting 5 Seconds ...
        timeout 5
        start wmplayer.exe

これは何らかの構文エラーであることは 99% 確信していますが、修正方法や、正しいやり方かどうかはわかりません。編集: これは私が受け取ったエラーの画像です:

答え1

ダウンロード フォルダーからファイルを移動していると仮定すると、次のように記述します。

@echo off

set "dwn=%USERPROFILE%\Downloads"
set "pic=%USERPROFILE%\Pictures"
set "vid=%USERPROFILE%\Videos"

echo Organizing Your Videos . . .
for /r "%dwn%" %%A in (*.mp4) do (move /y "%%A" "%vid%" >nul)
echo.
echo           Your Videos have been Organized!
echo.
echo Organizing Your Images . . .
for /r "%dwn%" %%B in (*.jpg *.bmp *.gif *.png) do (move /y "%%B" "%pic%" >nul)
echo.
echo           Your Images have been Organized!
echo.
echo            _
echo           /(^|
echo          (  :
echo         __\  \  _____
echo       (____)  `^|
echo      (____)^|   ^|
echo       (____).__^|
echo        (___)__.^|_____
echo.
echo ORGANIZATION PROTOCOL COMPLETE!!!
echo.
echo Starting Windows Media Player . . .
echo.
echo Waiting 5 seconds . . .
timeout 5 >nul
start wmplayer.exe

for /rディレクトリ内のすべてのファイルをループします。ビデオ ファイルの種類が 1 つしかない場合は過剰に思えますが、1 行で画像が処理される様子を確認できます。必要に応じて、他のビデオの種類についても同様に行うことができます。私は個人的な好みで間隔を空けましたが、何らかの理由で、親指を立てるというセンスを気に入っていただけると感じたため、コードの作成よりもそれに多くの時間を費やしました。私は優先順位の感覚が非常に優れているためです。変数を使用すると、処理が整理され、複数の異なる行でパスを変更する必要がなくなるため、常に変数を好みます。%USERPROFILE%環境変数は、スクリプトが変更しているプロファイル内で作業している場合 (実際にそうしています) にもベスト プラクティスです。 では%USERPROFILE%、管理者権限のないアカウントから管理者としてこのスクリプトを実行すると、代わりに管理者のユーザー プロファイルで動作/変更されることに注意してください。

また、ファイル拡張子は大文字と小文字を区別しないので、.PNG.を削除しました。

答え2

問題は、cmd スクリプトが実行されているディレクトリ環境にあります。

実行中ですc:\Windows\System32

つまり、ダウンロードしたファイルではなく、システム ファイルを移動しようとしているのです。

ダウンロードフォルダへのパスを明示的に指定するようにスクリプトを変更すれば、問題なく動作するはずです。

 echo Organizing Your Videos . . .
    move C:\Users\Devon\Downloads\*.mp4 C:\Users\Devon\Videos
  echo Your Videos have been Organized!
  echo Organizing Your Images . . .
  move C:\Users\Devon\Downloads\*.jpg C:\Users\Devon\Pictures\
  move C:\Users\Devon\Downloads\*.bmp C:\Users\Devon\Pictures\
  move C:\Users\Devon\Downloads\*.gif C:\Users\Devon\Pictures\
  move C:\Users\Devon\Downloads\*.png C:\Users\Devon\Pictures\
  move C:\Users\Devon\Downloads\*.PNG C:\Users\Devon\Pictures\
 echo Your images Have Been Organized!
 echo ORGANIZATION PROTOCOL COMPLETE!!!
 echo Starting Windows Media Player ...
 echo Waiting 5 Seconds ...
    timeout 5
    start wmplayer.exe

将来に備えて、両側のパスの代わりにユーザープロファイル変数を使用する必要があります。

関連情報