xCopy到目录的顶部文件夹

时间:2018-09-04 09:51:38

标签: batch-file cmd

我运行xcopy命令将一个文件传输到另一个文件。

xcopy /s "c:\users\documents\thisfile.txt" "d:\otherfiles\1.2.1"

我希望能够仅将文件复制到otherfiles目录中的最新文件夹中,而不是每次创建新版本文件夹时都对其进行硬编码。这些是版本号,并且这些数字只会增加。

这完全可能吗?

2 个答案:

答案 0 :(得分:1)

好的,可以检查目录的版本,但这将花费更多的代码,因为我们不能简单地删除点以获取数值并与下一个进行比较。原因是,考虑到版本1.2.31.23,如果我们删除点使其成为可匹配的数值,则它们最终都将成为123,因此每个版本部分都必须是经过测试。

但是,基于对我的问题的评论,您将新版本创建为文件夹,并且因此可以按日期排序,因此只需运行dir命令并按创建日期排序即可。它将最新文件夹设置为您所需的变量:

@echo off
for /f "delims=" %%i in ('dir /b /ad /o:d D:\otherfiles') do set "myvar=%%i"
xcopy /s "c:\users\documents\thisfile.txt" "d:\otherfiles\%myvar%"

答案 1 :(得分:1)

如果您想在PowerShell中执行此操作,则可以。这将需要PowerShell 3.0或更高版本。可以使用2.0完成,但是需要进行更改。希望您已打开或可以升级到现代版本的PowerShell。

当您确信文件将被正确复制时,请从-WhatIf cmdlet中删除Copy-Item

$fn = 'C:/src/t/xxx.txt'
$destbasedir = 'C:/src/t/lastdir'

Get-ChildItem -Directory -Path $destbasedir |
    Sort-Object -Property Name |
    Select-Object -Last 1 |
    ForEach-Object { Copy-Item -Path $fn -Destination $_.FullName -Whatif }

可以将其放入.bat文件脚本中。

SET "FN=C:\src\t\xxx.txt"
SET "DESTBASEDIR=C:\src\t\lastdir"

powershell -NoProfile -Command ^
    "Get-ChildItem -Directory -Path %DESTBASEDIR% |" ^
        "Sort-Object -Property Name |" ^
        "Select-Object -Last 1 |" ^
        "ForEach-Object { Copy-Item -Path "%FN%" -Destination "$_.FullName" -Whatif }"