Как сделать так, чтобы командный файл последовательно называл себя, если существует его предыдущее имя - PullRequest
0 голосов
/ 26 марта 2019

Я пишу небольшую программу, чтобы взять и сохранить пользовательский ввод, чтобы я мог ссылаться на него для внесения изменений в инвентарь. Сохраняет имя как Asset_Change. Как сделать так, чтобы оно создавало новое имя файла, если предыдущее существует, поэтому при следующем запуске программы выходной файл будет изменен на Asset_Change_1 или что-то в этом духе.

@echo off
set Output="T:\Helpdesk\Documentation\HDI - Help Desk Inventory\Assets to File into 1213"

set /p Date_Sent=Date Sent: 
set /p Item=Item: 
set /p Model_Number=Model Number: 
set /p Serial_Number=Serial Number: 
set /p Item_Location=Inventory Location: 
set /p Details=Details: 
set /p RMA=RMA Number: 
set /p Repair_Cost=Repair Cost: 
set /p Shipping_Cost=Shipping Cost: 
set /p Date_Received=Date Received: 

echo Date Sent: %Date_Sent% >> %Output%\Asset_Change.txt
echo Item: %Item% >> %Output%\Asset_Change.txt
echo Model Number: %Model_Number% >> %Output%\Asset_Change.txt
echo Serial Number: %Serial_Number% >> %Output%\Asset_Change.txt
echo Item Location: %Item_Location% >> %Output%\Asset_Change.txt
echo Details: %Details% >> %Output%\Asset_Change.txt
echo RMA: %RMA% >> %Output%\Asset_Change.txt
echo Repair Cost: %Repair_Cost% >> %Output%\Asset_Change.txt
echo Shipping Cost: %Shipping_Cost% >> %Output%\Asset_Change.txt
echo Date Received: %Date_Received% >> %Output%\Asset_Change.txt

echo Thank you. This will now close.
pause

Каждый раз, когда программа запускается, она в настоящее время добавляет изменения в текущий файл Asset_Change.txt. Я просто хочу, чтобы он каждый раз создавал новый файл.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Существует простое решение для нумерации файлов. Единственным недостатком этого кода является то, что если кто-то удаляет файл 2, а файл 1 и файл 3 существуют, он воссоздает файл 2. Я не уверен, почему вы не решили использовать метку даты и времени с именем файла.

@echo off
set "Output=T:\Helpdesk\Documentation\HDI - Help Desk Inventory\Assets to File into 1213"

set /p Date_Sent=Date Sent: 
set /p Item=Item: 
set /p Model_Number=Model Number: 
set /p Serial_Number=Serial Number: 
set /p Item_Location=Inventory Location: 
set /p Details=Details: 
set /p RMA=RMA Number: 
set /p Repair_Cost=Repair Cost: 
set /p Shipping_Cost=Shipping Cost: 
set /p Date_Received=Date Received: 

SET "num="
set "us="

:loop
IF EXIST "Asset_Change%us%%num%.txt" (
    set /A "num+=1"
    set "us=_"
    goto loop
)
set "file=Asset_Change%us%%num%.txt"

(
echo Date Sent: %Date_Sent%
echo Item: %Item%
echo Model Number: %Model_Number%
echo Serial Number: %Serial_Number%
echo Item Location: %Item_Location%
echo Details: %Details%
echo RMA: %RMA%
echo Repair Cost: %Repair_Cost%
echo Shipping Cost: %Shipping_Cost%
echo Date Received: %Date_Received%
)>>"%Output%\%file%"

echo Thank you. This will now close.
pause
0 голосов
/ 26 марта 2019

Финальный код должен выглядеть так:

@echo off
setlocal EnableDelayedExpansion

set "Output=T:\Helpdesk\Documentation\HDI - Help Desk Inventory\Assets to File into 1213"

set /p Date_Sent=Date Sent: 
set /p Item=Item: 
set /p Model_Number=Model Number: 
set /p Serial_Number=Serial Number: 
set /p Item_Location=Inventory Location: 
set /p Details=Details: 
set /p RMA=RMA Number: 
set /p Repair_Cost=Repair Cost: 
set /p Shipping_Cost=Shipping Cost: 
set /p Date_Received=Date Received: 

if exist "%Output%\Asset_Change.txt" (
    set "file=Asset_Change.txt"
) else (
    set "file=Asset_Change_1.txt"
    goto :calc
)

:calc
if exist "%file%" (
    goto :out
) else (
    for /F "tokens=3 delims=_." %%A IN ("%file%") do set "num=%%A"
    set /a "num+=1"
    set "file=Asset_Change_!num!.txt"
)
goto :calc

:out
(
echo Date Sent: %Date_Sent%
echo Item: %Item%
echo Model Number: %Model_Number%
echo Serial Number: %Serial_Number%
echo Item Location: %Item_Location%
echo Details: %Details%
echo RMA: %RMA%
echo Repair Cost: %Repair_Cost%
echo Shipping Cost: %Shipping_Cost%
echo Date Received: %Date_Received%
)>>"%Output%\%file%"

echo Thank you. This will now close.
pause

Это лучшее решение, которое я нашел. Я знаю, что это сложно, но я не мог еще больше упростить это.

Введите cmd:

  • for /?
  • setlocal /?
  • if /?
  • set /?
  • goto /?

для получения дополнительной информации об используемых командах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...