【问题标题】:How can I change file extension and move a file to certain directory in one batch file?如何更改文件扩展名并将文件移动到一个批处理文件中的某个目录?
【发布时间】:2016-09-24 23:29:10
【问题描述】:

我在尝试重命名和移动单个文件时遇到问题,一旦拖动到我的批处理文件上。

我查看了四个非常相似的帖子,但没有一个对我有任何帮助:

  1. How to rename and move files to new directory

  2. Windows Script to Rename and move files

  3. .bat file to rename and move files with prompt

  4. Moving and renaming files, keeping extension but include sub directories in batch file

第 4 个示例最接近我想要完成的任务,但随机重命名文件并将它们复制到多个目录。我想要做的就是将文件拖到 .bat 脚本更改扩展名并将其移动到某个目录。

我试图结合这两个代码重命名,然后将文件移动到特定目录。但我在这样做时遇到了麻烦,因为我不太确定这样做。

@echo off
set /p var=Move To:
%var%
cls
move %1 "%var%"
pause

@echo off
set /p var=File Name:
%var%
cls
set /p var2=File Type:
%var2%
Rename %1 "%var%.%var2%

【问题讨论】:

  • 那么...你的问题是什么?你有什么代码?它有什么问题?
  • 我试图将这两个代码组合起来重命名,然后将文件移动到特定目录,但我在这样做时遇到了麻烦,因为我不太确定这样做。 > @echo off set /p var=Move To:%var% cls move %1 "%var%" pause > @echo off set /p var=File Name:%var% cls set /p var2=File Type:%var2% Rename %1 "%var%.%var2%
  • 如果您将该评论添加到您的原始问题中会更好。始终尝试从一开始就添加尽可能多的细节,以便我们能够更快地了解您的问题并制定答案。

标签: windows batch-file


【解决方案1】:

这与您一直在查看的代码完全不同,但是:

@Echo Off
If Not Exist "%~1" Exit/B
If Exist "%~1\" Exit/B
If Not Exist "A:\Certain Directory\%~n1.ext" Move "%~1" "A:\Certain Directory\%~n1.ext"

【讨论】:

    【解决方案2】:

    也可以使用更改文件扩展名将文件移动到另一个文件夹

    • 选择文件并按Ctrl+C(复制),
    • 进入目标文件夹并按Ctrl+V(粘贴)
    • F2 开始重命名文件,
    • 更改文件扩展名并按 RETURN

    或者

    • 选择文件并点击Windows ExplorerMove to命令,
    • 在打开的窗口中选择目标文件夹并点击按钮移动
    • 导航到目标文件夹并
    • F2 更改文件扩展名,修改文件扩展名并按 RETURN

    对于此类任务最有用的是使用像 Total Commander 这样的文件管理器,它支持在将所选文件从左到右或从右到左移动时更改文件扩展名文件夹窗格。

    但是,这里有一个批处理脚本,您可能会使用它并且已经包含一些扩展名来检测一些可能的错误,这些错误在用户必须手动输入路径和文件扩展名时总是会发生。它仍然可以通过更多的错误检查来增强。

    @echo off
    cls
    echo.
    rem Is the batch file called without an argument/parameter?
    if "%~1" == "" (
        echo Call %~nx0 always with name of a file with full path.
        echo.
        echo For example:
        echo.
        echo %~nx0 "C:\Path to folder\with file to\move with new extension.txt"
        echo.
        pause
        goto :EOF
    )
    
    if not exist "%~1" (
        echo Error: There is no file
        echo.
        echo %~1
        echo.
        pause
        goto :EOF
    )
    
    if exist "%~1\" (
        echo Error: The argument
        echo.
        echo %~1
        echo.
        echo specifies a directory and not a file.
        echo.
        pause
        goto :EOF
    )
    
    setlocal EnableDelayedExpansion
    echo Preparing for moving the file
    echo.
    echo %~1
    echo.
    set "TargetFolder=%USERPROFILE%\Documents"
    echo Please specify the target folder.
    echo.
    echo Default target is: %TargetFolder%
    echo.
    set /P "TargetFolder=Move to: "
    echo.
    
    rem Replace all / by \ in target folder path.
    set "TargetFolder=!TargetFolder:/=\!"
    
    rem If the target folder path ends with a backslash, remove the backslash.
    if "!TargetFolder:~-1!" == "\" set "TargetFolder=!TargetFolder:~0,-1!"
    
    rem Does the target folder really exist?
    if not exist "!TargetFolder!\" (
        echo Error: The target folder
        echo.
        echo !TargetFolder!
        echo.
        echo does not exist.
        echo.
        endlocal
        pause
        goto :EOF
    )
    
    set "NewExtension=txt"
    echo.
    echo Please specify the new file extension.
    echo.
    echo Default file extension is: %NewExtension%
    echo.
    set /P "NewExtension=New extension: "
    echo.
    
    rem If the new file extension starts with a point, remove the point.
    if "!NewExtension:~0,1" == "." set "NewExtension=!NewExtension:~1!"
    
    rem Windows interprets everything up to last point as file name and
    rem everything from last point to end of name of file as file extension.
    rem On *nix systems it is common that hidden files don't have a file
    rem extension and start with a point (for hiding the file). To copy such
    rem files with unusual file name on Windows like .htaccess also correct,
    rem it is necessary to interpret the file extension as file name if the
    rem file starts with a point and has no file extension.
    
    if not "%~n1" == "" (
        set "NewNameOfFile=%~n1.!NewExtension!"
    ) else (
        set "NewNameOfFile=%~x1.!NewExtension!"
    )
    
    echo.
    move /-Y "%~1" "!TargetFolder!\!NewNameOfFile!"
    if errorlevel 1 (
        endlocal
        echo.
        pause
    ) else (
        endlocal
    )
    

    要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

    • cls /?
    • echo /?
    • endlocal /?
    • goto /?
    • if /?
    • move /?
    • pause /?
    • rem /?
    • set /?
    • setlocal /?

    【讨论】:

    • “我真的不明白应该有什么好处” - 听说过任务自动化吗?
    • 什么?自动化通常使用脚本构建,无论是 perl、bash、windows batch 还是任何其他相关语言。没有人每次都强制手动输入路径,它可以作为另一个批处理文件输出的输入提供,例如
    • 是的,我已经读过了。他询问了一件非常具体的事情,这可能是也可能不是更大的事情的一部分。它可以只是一个简化的演示示例,也可以省略不必要的细节。在任何情况下,假设普通用户(尤其是想要编写批处理脚本的人)知道如何使用 Windows GUI 处理移动和重命名文件这样的基本任务是非常合理的
    • @SomeWittyUsername 如果 FleetSakes 会写道,任何拖放到批处理文件上的文件都应该移动到 C:\Temp 并保留文件名,但将文件扩展名更改为 bak 并使用覆盖现有文件C:\Temp 中的相同名称和扩展名,我会编写不同的批处理代码,并且会理解该脚本有助于自动化文件移动。但我无法阅读有问题的内容,也无法阅读 FleetSakes 提供的代码。也许您对 FleetSakes 给出的信息的解释与我不同。但是,不应使用 cmets 来讨论其含义。
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2013-08-03
    • 2020-07-21
    • 1970-01-01
    • 2020-09-23
    • 2010-09-10
    相关资源
    最近更新 更多