【问题标题】:Windows batch file to rename output file with files I am compressing.Windows 批处理文件用我正在压缩的文件重命名输出文件。
【发布时间】:2017-05-01 15:17:15
【问题描述】:

我正在压缩一个文件并尝试通过读取原始文件并使用原始文件名重命名输出文件来重命名我的输出文件。目前我正在运行一个批处理文件,它将通过在存档目录中创建外壳并将文件复制到其中来压缩文件。我还在为该事件创建一个日志文件。我正在使用 7-Zip 命令行版本进行压缩。

echo Start Compression

7za a -t7z "c:\Archive_Directory\%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.7z"  "C:\File_To_Compress\*.xls" >"C:\Users\Compression_Logs\_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.log"

echo Finish Compression    

timeout /t 30

批处理文件创建/压缩必要的文件并根据时间戳为所有文件提供相同的名称。只是希望我能弄清楚所有文件如何具有原始文件名。

我所拥有的示例输出:
原始文件名 - Source.xls
压缩文件   - 1030-05012017.7z
日志文件               - 1030-05012017.log

我想要什么:
压缩文件 - Source_1030-05012017.7z
日志文件              - Source_1030-05012017.log

【问题讨论】:

  • HELP FOR 将提供一些有用的信息,尤其是关于参数扩展的信息。您的注意力将指向%~ 扩展,特别是%~n

标签: batch-file command-line


【解决方案1】:
echo Start Compression

for %%a in ("C:\File_To_Compress\*.xls") do set "name=%%~na"

7za a -t7z "c:\Archive_Directory\%name%_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.7z"  "C:\File_To_Compress\*.xls" >"C:\Users\Compression_Logs\%name%_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.log"

echo Finish Compression    

timeout /t 30

%%a依次设置为与掩码匹配的每个文件的名称,然后依次将每个文件名设置为name%%~na表示name part only

在所需文件名中使用name 作为字符串。

注意:将时间戳显示为 YYYYMMDDHHMMSS 被认为更有用,它允许以逻辑方式按字母顺序排序。

echo Start Compression

for %%a in ("C:\File_To_Compress\*.xls") do (

 7za a -t7z "c:\Archive_Directory\%%~na_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.7z"  "%%a" >"C:\Users\Compression_Logs\%%~na_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.log"
)

echo Finish Compression    

timeout /t 30

此版本将为每个源文件单独创建存档和日志文件

【讨论】:

  • 正如所写,这是行不通的;它只会给出扩展中最后一个文件的名称。在FOR 命令中使用() 对多个命令进行分组,请参阅the FOR command at ss64
  • @JeffZeitlin - 我猜这是出于某种原因的深思熟虑的选择。
  • @SomethingDark:似乎 OP 想要将所有目标文件压缩到一个文件中 - 那么要分配什么名称?如果每个都要单独压缩,为什么? - 一个 xls 文件一开始比较小,所以看起来没什么意义。
  • @Magoo - 我不同意对压缩 Excel 工作簿的实用性的评估;但是,我可以将其视为通用“归档”过程的 CMVE,并从该角度发表评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 2019-05-25
相关资源
最近更新 更多