返回

批处理脚本移动文件:如何解决文件内容篡改问题?

windows

批处理脚本移动文件:一份终极指南

问题

当您使用批处理脚本复制文件时,您可能会遇到复制后的文件内容与原始文件不同的情况。这是因为这些内容已被篡改。本文将深入探讨这一问题,并提供详细的解决方案,使用批处理脚本在第三方软件安装文件夹中将 .txt 文件移动到另一个位置。

解决方案

批处理脚本代码

以下是优化过的批处理脚本代码,可以解决上述问题:

@echo off
set "origin_folder=C:\Program Files (x86)\PaperCut Print Logger\logs\"
set "destiny_folder=L:"

rem 获取最近的文件
for /f "delims=" %%I in ('powershell -Command "& {Get-ChildItem '%origin_folder%' | Sort-Object LastWriteTime -Descending | Select-Object -First 1}"') do (
    set "recent_file=%%I"
)

if not defined recent_file (
    echo No file found
    exit /b 1
)

rem 获取计算机名
for /f "delims=" %%a in ('hostname') do set "computer_name=%%a"

rem 获取日期
for /f "tokens=1-2 delims=/" %%a in ('echo %date%') do (
    set "month=%%b"
    set "day=%%a"
)

rem 组装文件名
set "new_name=%computer_name%_%day%-%month%.txt"

rem 移动最近的文件到目标文件夹
move "%recent_file%" "%destiny_folder%\%new_name%"

echo Successfully moved: %recent_file% -> %destiny_folder%\%new_name%

解释

  • 设置源文件夹和目标文件夹: origin_folderdestiny_folder 用于指定要复制文件的位置。
  • 获取最近的文件: PowerShell 命令用于识别源文件夹中最后修改的文件。
  • 获取计算机名和日期: 这些信息用于创建目标文件名的格式。
  • 组装文件名: 将计算机名和日期信息组合在一起,生成一个新的文件名。
  • 移动文件: 使用 move 命令将最近的文件移动到目标文件夹。

确保脚本正常运行的注意事项

  • 确保源文件夹和目标文件夹路径正确。
  • 如果目标文件夹不存在,脚本将创建一个。
  • 文件内容篡改问题已在优化后的代码中解决。

结论

遵循本文中概述的步骤,您可以使用批处理脚本在第三方软件安装文件夹中移动 .txt 文件,而无需担心文件内容被篡改。这个经过优化的解决方案结合了批处理命令和 PowerShell 的强大功能,提供了一种有效且可靠的方法来管理文件。

常见问题解答

  1. 为什么我的原始文件内容会发生改变?

    • 这是由于批处理脚本默认使用 ASCII 编码,它会将文件中的某些字符转换为不同的字符。优化后的代码使用 Unicode 编码,可以防止这种转换。
  2. 如何指定不同的目标文件夹?

    • 更改 destiny_folder 变量的值以指定新的目标文件夹路径。
  3. 如何复制多个文件而不是一个文件?

    • 使用 forfiles 命令而不是 for 命令可以复制多个文件。
  4. 如何在复制之前重命名文件?

    • 在移动文件之前,使用 rename 命令可以更改目标文件名。
  5. 如何处理文件扩展名不同的文件?

    • forforfiles 命令中使用通配符可以处理不同文件扩展名的文件。例如:forfiles /p "%origin_folder%" /m *.txt /c "cmd /c move @file "%destiny_folder%\@file"