Expand variables in a batch script like parameter extension
I know that if I have a batch script with parameters, I can expand those parameters to fully qualified paths like so
set expanded=%~f1
How can I do the same thing with a variable in a for loop? I'm looping over the lines in a text file and I want to expand each line (which contains a relative path) to a full path. The following is not allowed
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set p=!p:abc=def! # modify p a bit
set expanded=!~fp! <--- invalid
)
endlocal
Can this be done?
batch-file
add a comment |
I know that if I have a batch script with parameters, I can expand those parameters to fully qualified paths like so
set expanded=%~f1
How can I do the same thing with a variable in a for loop? I'm looping over the lines in a text file and I want to expand each line (which contains a relative path) to a full path. The following is not allowed
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set p=!p:abc=def! # modify p a bit
set expanded=!~fp! <--- invalid
)
endlocal
Can this be done?
batch-file
4
what's the problem withset "p=%%~ff"?
– npocmaka
Dec 28 '18 at 0:14
1
That's one reason why I usually use uppercase for variables and lower case modifiers%%~fF. Just to me not getting confused 😕
– LotPings
Dec 28 '18 at 0:38
1
If your text file does not hold full paths, you said they were relative, then it can only add the missing part if the relative path is also relative to the script/current directory. You cannot expect it to know a missing section of a text string!
– Compo
Dec 28 '18 at 1:22
@npocmaka I should have expanded my example. I actually modifypa bit (e.g chop off the first few characters) before I want to do this expansion
– Jordan Crittenden
Dec 28 '18 at 17:57
@JordanCrittenden - then show the full example. I suppose you'll have to use nested for loops.
– npocmaka
Dec 28 '18 at 18:39
add a comment |
I know that if I have a batch script with parameters, I can expand those parameters to fully qualified paths like so
set expanded=%~f1
How can I do the same thing with a variable in a for loop? I'm looping over the lines in a text file and I want to expand each line (which contains a relative path) to a full path. The following is not allowed
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set p=!p:abc=def! # modify p a bit
set expanded=!~fp! <--- invalid
)
endlocal
Can this be done?
batch-file
I know that if I have a batch script with parameters, I can expand those parameters to fully qualified paths like so
set expanded=%~f1
How can I do the same thing with a variable in a for loop? I'm looping over the lines in a text file and I want to expand each line (which contains a relative path) to a full path. The following is not allowed
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set p=!p:abc=def! # modify p a bit
set expanded=!~fp! <--- invalid
)
endlocal
Can this be done?
batch-file
batch-file
edited Dec 28 '18 at 18:00
asked Dec 28 '18 at 0:11
Jordan Crittenden
4361616
4361616
4
what's the problem withset "p=%%~ff"?
– npocmaka
Dec 28 '18 at 0:14
1
That's one reason why I usually use uppercase for variables and lower case modifiers%%~fF. Just to me not getting confused 😕
– LotPings
Dec 28 '18 at 0:38
1
If your text file does not hold full paths, you said they were relative, then it can only add the missing part if the relative path is also relative to the script/current directory. You cannot expect it to know a missing section of a text string!
– Compo
Dec 28 '18 at 1:22
@npocmaka I should have expanded my example. I actually modifypa bit (e.g chop off the first few characters) before I want to do this expansion
– Jordan Crittenden
Dec 28 '18 at 17:57
@JordanCrittenden - then show the full example. I suppose you'll have to use nested for loops.
– npocmaka
Dec 28 '18 at 18:39
add a comment |
4
what's the problem withset "p=%%~ff"?
– npocmaka
Dec 28 '18 at 0:14
1
That's one reason why I usually use uppercase for variables and lower case modifiers%%~fF. Just to me not getting confused 😕
– LotPings
Dec 28 '18 at 0:38
1
If your text file does not hold full paths, you said they were relative, then it can only add the missing part if the relative path is also relative to the script/current directory. You cannot expect it to know a missing section of a text string!
– Compo
Dec 28 '18 at 1:22
@npocmaka I should have expanded my example. I actually modifypa bit (e.g chop off the first few characters) before I want to do this expansion
– Jordan Crittenden
Dec 28 '18 at 17:57
@JordanCrittenden - then show the full example. I suppose you'll have to use nested for loops.
– npocmaka
Dec 28 '18 at 18:39
4
4
what's the problem with
set "p=%%~ff"?– npocmaka
Dec 28 '18 at 0:14
what's the problem with
set "p=%%~ff"?– npocmaka
Dec 28 '18 at 0:14
1
1
That's one reason why I usually use uppercase for variables and lower case modifiers
%%~fF. Just to me not getting confused 😕– LotPings
Dec 28 '18 at 0:38
That's one reason why I usually use uppercase for variables and lower case modifiers
%%~fF. Just to me not getting confused 😕– LotPings
Dec 28 '18 at 0:38
1
1
If your text file does not hold full paths, you said they were relative, then it can only add the missing part if the relative path is also relative to the script/current directory. You cannot expect it to know a missing section of a text string!
– Compo
Dec 28 '18 at 1:22
If your text file does not hold full paths, you said they were relative, then it can only add the missing part if the relative path is also relative to the script/current directory. You cannot expect it to know a missing section of a text string!
– Compo
Dec 28 '18 at 1:22
@npocmaka I should have expanded my example. I actually modify
p a bit (e.g chop off the first few characters) before I want to do this expansion– Jordan Crittenden
Dec 28 '18 at 17:57
@npocmaka I should have expanded my example. I actually modify
p a bit (e.g chop off the first few characters) before I want to do this expansion– Jordan Crittenden
Dec 28 '18 at 17:57
@JordanCrittenden - then show the full example. I suppose you'll have to use nested for loops.
– npocmaka
Dec 28 '18 at 18:39
@JordanCrittenden - then show the full example. I suppose you'll have to use nested for loops.
– npocmaka
Dec 28 '18 at 18:39
add a comment |
1 Answer
1
active
oldest
votes
What you're asking is possible, and you don't need to set a variable p. Consider this:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set expanded=!~fp! <--- invalid
set valid_expanded=%%~ff <--- valid
)
endlocal
If you still want to set the variable p, however:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%~ff
)
endlocal
It basically works the same as it would when calling labels and files.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53952261%2fexpand-variables-in-a-batch-script-like-parameter-extension%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
What you're asking is possible, and you don't need to set a variable p. Consider this:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set expanded=!~fp! <--- invalid
set valid_expanded=%%~ff <--- valid
)
endlocal
If you still want to set the variable p, however:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%~ff
)
endlocal
It basically works the same as it would when calling labels and files.
add a comment |
What you're asking is possible, and you don't need to set a variable p. Consider this:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set expanded=!~fp! <--- invalid
set valid_expanded=%%~ff <--- valid
)
endlocal
If you still want to set the variable p, however:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%~ff
)
endlocal
It basically works the same as it would when calling labels and files.
add a comment |
What you're asking is possible, and you don't need to set a variable p. Consider this:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set expanded=!~fp! <--- invalid
set valid_expanded=%%~ff <--- valid
)
endlocal
If you still want to set the variable p, however:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%~ff
)
endlocal
It basically works the same as it would when calling labels and files.
What you're asking is possible, and you don't need to set a variable p. Consider this:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%f
set expanded=!~fp! <--- invalid
set valid_expanded=%%~ff <--- valid
)
endlocal
If you still want to set the variable p, however:
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%f in ('type "paths.txt"') do (
set p=%%~ff
)
endlocal
It basically works the same as it would when calling labels and files.
answered Dec 28 '18 at 1:03
Jahwi
381111
381111
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53952261%2fexpand-variables-in-a-batch-script-like-parameter-extension%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
4
what's the problem with
set "p=%%~ff"?– npocmaka
Dec 28 '18 at 0:14
1
That's one reason why I usually use uppercase for variables and lower case modifiers
%%~fF. Just to me not getting confused 😕– LotPings
Dec 28 '18 at 0:38
1
If your text file does not hold full paths, you said they were relative, then it can only add the missing part if the relative path is also relative to the script/current directory. You cannot expect it to know a missing section of a text string!
– Compo
Dec 28 '18 at 1:22
@npocmaka I should have expanded my example. I actually modify
pa bit (e.g chop off the first few characters) before I want to do this expansion– Jordan Crittenden
Dec 28 '18 at 17:57
@JordanCrittenden - then show the full example. I suppose you'll have to use nested for loops.
– npocmaka
Dec 28 '18 at 18:39