批处理文件无法正确移动文件

批处理文件无法正确移动文件

几个月前,我在 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遍历目录中的所有文件 - 当您只有一种视频文件类型时这似乎有点多余,但您可以看到图片是如何用一行代码处理的;您可以根据需要对其他视频类型执行相同的操作。我根据自己的个人喜好将事情分开,出于某种原因,我觉得您会喜欢竖起大拇指的感觉,所以我花在这上面的时间比编写代码的时间还多 - 因为我有很好的优先级意识。我总是更喜欢变量,因为它们可以清理东西并防止您必须在几行不同的行中更改路径。%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

尽管实际上你应该使用用户配置文件变量来代替两侧的路径,以确保未来

相关内容