xCopy в верхнюю папку каталога - PullRequest
       1

xCopy в верхнюю папку каталога

0 голосов
/ 04 сентября 2018

Я запускаю команду xcopy для передачи из одного файла в другой.

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

Я бы хотел иметь возможность просто скопировать файл в самую последнюю папку в каталоге otherfiles, а не жестко кодировать его каждый раз, когда создается папка новой версии. Это номера версий, и они, как правило, просто увеличиваются.

Возможно ли это полностью?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Если вы хотите сделать это в PowerShell, это возможно. Это потребует PowerShell 3.0 или выше. Это может быть сделано с 2.0, но потребует изменений. Надеемся, что вы используете или можете перейти на современную версию PowerShell.

Если вы уверены, что файл будет скопирован правильно, удалите -WhatIf из командлета 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 }"
0 голосов
/ 04 сентября 2018

Хорошо, можно проверить версии каталогов, но для этого потребуется немного больше кода, поскольку мы не можем просто удалить точки, чтобы получить числовое значение и сравнить со следующим. Причина в том, что, учитывая версии 1.2.3 и 1.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%"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...