У меня есть .bat, который вызывает скрипт .vbs для возврата команды изменения каталога, такой как
cd /D ../../some/determined/path
Но кажется, что проблема в том, что, хотя файл .bat меняет каталог, после завершения выполнения, командная строка остается там, где она началась.
@echo cd_command: !cd_command!
cd !cd_command!
REM Next line displays expected files for said directory
dir
Моя конечная цель - получить исходную вызывающую командную строку для изменения каталога.
Как я могу сделать вызывающую командную строкуфактически изменить каталог через файл .bat?
Обновление
Кажется, я недостаточно ясен, и, поскольку я собираюсь опубликовать код публично, я мог бы также опубликовать его здесьв полном объеме.(Хотя по какой-то причине опасаетесь этого?)
Моя конечная цель такова: я набираю Win + R, чтобы открыть команду запуска.Введите cmd, чтобы получить приглашение.а затем введите этот файл bat (который будет добавлен к переменным среды), чтобы я мог сделать что-то вроде:
C:\Users\Mallow> cdj 20.2
C:\Users\Mallow\Documents\20-29 Areas\20 Category\2 Id>
У меня есть этот файл Bat
@echo off
setlocal enabledelayedexpansion
REM Check only one parameter was passed
if not "%~2"=="" (
echo No more than two arguments, please
goto :eof
)
if not "%~1"=="" (
echo "1"
REM REM Use vbscript to interpret float string.
FOR /F "usebackq tokens=*" %%r in (`CSCRIPT //NoLogo "cdj.vbs" %~1`) DO SET johnny_decimal_command=%%r
echo command:
@echo johnny_decimal: !johnny_decimal_command!
REM This variable is the full command
!johnny_decimal_command!
REM Tests the output to see if the directory did change script level
REM dir
) else (
echo "2"
REM REM No parameters passed
REM echo Must pass in Johnny Decimal id. Example: 12.01 or 12; [Category.Optional ID]
REM goto :eof
)
REM REFERENCES:
REM https://stackoverflow.com/questions/17880183/pass-value-from-vbscript-to-batch
REM https://stackoverflow.com/questions/15129085/how-to-return-a-string-from-a-vbscript-which-is-executed-from-a-python-file
REM https://stackoverflow.com/questions/1497985/batch-checking-the-number-of-parametersfg
REM https://stackoverflow.com/questions/3949978/why-does-this-batch-variable-never-change-even-when-set#3950000
REM https://stackoverflow.com/questions/21013428/pass-variable-from-batch-to-vbs
И этот VBSСкрипт:
Dim base_path
base_path = "C:\Users\Mallow\Documents\"
' Get passed arguments
dim oParameters
dim johnny_decimal
Set oParameters = WScript.Arguments
WScript.echo Main(oParameters.Item(0))
' Generates Johnny Decimal Command
Function Main(ByVal johnny_decimal)
dim is_number
dim has_category
dim has_id
dim johnny_command
' Check cdj is numeric
if isnumeric(johnny_decimal) Then
is_number = True
else
johnny_command = "echo Johnny Decimal passed is not a numerical value."
end if
if is_number then
' Check if number passed is integer or float
if instr(1, johnny_decimal, ".") > 0 then
has_category = True
has_id = True
else
has_category = True
end if
end if
if has_category Then
dim area, category, id
' Prepare template for command
johnny_command = base_path & "{area}*\{category}*\"
' Calculate Category and Area
category = int(johnny_decimal)
area = int(left(johnny_decimal,1) & "0")
' Put info into command
johnny_command = replace(johnny_command, "{area}", area)
johnny_command = replace(johnny_command, "{category}", category)
If has_id Then
' Prepare template for command
johnny_command = johnny_command & "{id}*"
' Calculate ID
id = int((johnny_decimal - category) * 100)
' Make sure id has leading zero
if len(id) = 1 then
id = "0" & id
end if
' Put info into command
johnny_command = replace(johnny_command, "{id}", id)
End If
' Prepend with change directory command and encapsulate in quotes
johnny_command = "cd /D " & chr(34) & johnny_command & chr(34)
End If
Main = johnny_command
End Function
'Set File = FSO.OpenTextFile(WScript.Arguments(0) &"\test.txt", 2, True)
' /1465614/mogu-li-ya-peredat-argument-v-vbscript-fail-vbs-zapuschennyi-s-cscript#1465616
Скрипт VBS предназначен для того, чтобы я мог интерпретировать переданные аргументы как числа (так как это всегда будет целое число или число с плавающей точкой в формате [00 или 00.00]