В средах командной строки, таких как командная строка Windows и PowerShell, пробелы используются для разделения команд и аргументов, но имена файлов и папок также могут содержать пробелы. Чтобы указать путь к файлу имеющего символ пробела в названии или пути к файлу, вам нужно «экранировать» его.
Почему нужно избегать символ пробела?
«Пробел» в названии файла или папки, может препятствовать правильной обработке команды, экранирование пробела заставит оболочку рассматривать его как стандартный пробел, а не как специальный символ, разделяющий аргументы командной строки.
Например, предположим, что у вас есть текстовый файл, содержимое которого вы хотите просмотреть. Вы можете сделать это с помощью команды type
. Предполагая, что текстовый файл находится по адресу C:\Папка\File.txt
, следующая команда в командной строке покажет содержимое файла:
Отлично! А что, если у вас есть такой же файл по адресу C:\Новая папка\File.txt?
Если вы попробуете выполнить приведенную ниже команду, это не сработает – пробелы в пути к файлу мешают правильно обработать команду.
type C:\ Новая папка \File.txt
Командная строка считает, что вы пытаетесь найти файл с именем Новая
, в результате вы получаете: «Ошибка во время обработки: C:\Новая.
Системе не удается найти указанный путь.».
Тоже самое будет? если пробел есть в имени файла New File.txt

Три способа избежать ошибок из-за символа пробел в Windows 10
Есть три разных способа избежать проблем используя пробел в пути к файлу Windows:
- Заключив путь (или его части) в двойные кавычки ( ”
). - Добавляя символ вставки ( ^
) перед каждым пробелом. ( Это работает только в командной строке / CMD.) - Добавляя знак ударения ( `
) перед каждым пробелом. ( Это работает только в PowerShell.)
Мы покажем вам, как использовать каждый из перечисленных способов.
Заключите путь к файлу в кавычки (“)
Стандартный способ убедиться, что Windows правильно обрабатывает путь к файлу, – заключить его в двойные кавычки "
. Например, в нашем примере команды выше мы просто выполняем следующее:
type "C:\ Новая папка \Test File.txt"
Вы можете заключить части пути в кавычки, если хотите. Например, предположим, что у вас есть файл с именем File.txt в этой папке. Вы можете запустить следующее:
type C:\" Новая папка "\File.txt
Однако в этом нет необходимости – в большинстве случаев вы можете просто заключить весь путь в кавычки.
Это решение работает как в традиционной среде командной строки (CMD), так и в Windows PowerShell.

Используйте символ каретки для правильной обработки пробелов (^)
В командной строке символ каретки ^
теоретически позволяет избежать пробелов. Просто добавьте его перед каждым пробелом в имени файла. ( Вы найдете этот символ в числовом ряду на клавиатуре. Чтобы ввести символ каретки, нажмите Shift
+ 6
.)
Вот проблема: хотя это должно работать, а иногда и работает, это работает не всегда. Командная строка обрабатывает этот символ странно.
Например, запустите следующую команду, но она не сработает:
type C:\ Новая ^ папка \Test^ File.txt
Ошибка экранирования пробела в командной строке
С другой стороны, если мы попытаемся открыть наш файл напрямую, введя его путь в командную строку, мы увидим, что символ каретки правильно экранирует пробелы:
C:\ Новая ^ папка \Test^ File.txt

Итак, когда это работает? Что ж, исходя из нашего исследования, похоже, что с некоторыми приложениями он работает, а с другими – нет. Это может варьироваться в зависимости от команды, которую вы используете. Командная строка обрабатывает этот символ странно. Если вам интересно, попробуйте с любой командой, которую вы используете, – она может работать, а может и не работать.
Мы рекомендуем использовать двойные кавычки в командной строке или переключиться на PowerShell и использовать способ, рассмотренный ниже.
Используйте символ ударения (`)
PowerShell использует знак ударения `
в качестве символа-пробела. Просто добавьте его перед каждым пробелом в имени файла. ( Вы найдете этот символ над клавишей Tab
и под клавишей Esc
на клавиатуре.)
type C:\ Новая ` папка \Test` File.txt
Каждый знак ударения сообщает PowerShell, что нужно избегать следующего символа.

Обратите внимание, что это работает только в среде PowerShell. В командной строке вам нужно будет использовать символ каретки.
Если вы знакомы с UNIX-подобными операционными системами, такими как Linux и macOS, вы, возможно, привыкли использовать символ обратной косой черты ( \
) перед пробелом, чтобы правильно обработать команду. Windows использует его для пути к файлам, поэтому он не работает – символы каретки ( ^
) и ударения ( `
) это своего рода обратная косая черта Windows в зависимости от того, какую оболочку вы используете.
Доброго времени суток.
Есть много файлов в папке таких как:
Т1253663 .jpg
Т1253632 .jpg
Т125362 .jpg
Т125362.jpg
Задача заключается в том, что через bat нужно переименовать
эти файлы, так чтобы они были совсем без пробелов.
Я особо не понимаю bat, поэтому вопрос к вам знатоки)
Заранее спасибо.
задан 15 янв 2018 в 1:03

У меня прибор не понимает пробелы в файлах, поэтому приходится часто запускать такой скрипт (он удаляет все пробелы в именах файлов):
:renameNoSpace [/R] [FolderPath]
@echo off
setlocal disableDelayedExpansion
if /i "%~1"=="/R" ( set "forOption=%~1 %2" set "inPath="
) else ( set "forOption=" if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
)
for %forOption% %%F in ("%inPath%* *") do ( if /i "%~f0" neq "%%~fF" ( set "folder=%%~dpF" set "file=%%~nxF" setlocal enableDelayedExpansion echo ren "!folder!!file!" "!file: =!" ren "!folder!!file!" "!file: =!" endlocal )
) Использование: назовите его, допустим, delspaces.bat, и используйте так:
delspaces.bat [без аргументов]: работает в текущем каталоге
delspaces.bat /R : переименовывает файлы во всём дереве папок, начиная с текущей
delspaces.bat папка : переименовывает файлы в каталоге "папка", найденном в текущем каталоге
delspaces.bat "c:\my folder\" : Переименовывает файлы по указанному пути ответ дан 15 янв 2018 в 2:14

Viktor Tomilov
4 золотых знака
25 серебряных знаков
63 бронзовых знака
А если я делаю переименование на машине, где есть powershell, то использую такой скрипт:
dir |
Where-Object { $_.name.Contains(" ") } |
Rename-Item -NewName { $_.name -replace " ","" } Я понимаю, что это не BAT, но работает весьма быстрее. Чтобы использовать, сохраните как имя_файла.ps1, а затем правый клик – запустить.
ответ дан 15 янв 2018 в 2:16

Viktor Tomilov
4 золотых знака
25 серебряных знаков
63 бронзовых знака
Имя по типу “name_ 02227.log”.
Eсть пробел между “_” и “0”. Присутствует он не всегда. Как удалить?
Я хотел создать проверку на пробел, но она не работает:
SET str=" 0122017"
IF %str:~0,1%==" " (SET str=%str:~1%) ” (SET str= 0122017″) was unexpected at this time.

4 золотых знака
16 серебряных знаков
29 бронзовых знаков
задан 29 авг 2017 в 10:22

5 серебряных знаков
27 бронзовых знаков
29 авг 2017 в 10:30
Хочу сделать это автоматически, а не руками. фалов генерируеться много.
29 авг 2017 в 10:32
1) Вот зачем кавычки в первом SET? не бывает кавычек в имени файла
. 2) Не для BAT/CMD задачка-то, лучше на VBS выполнить требуемое.29 авг 2017 в 11:42
А что там можно поставить? Я из мира Java, я замечаю что строки работают совсем по другому в батах. Для меня не понятно в чем тут проблема. Имя фала генерируеться в bat-e и мне нужно его изменить там же. Это невозможно?
29 авг 2017 в 11:57
Мне тружно представить, что он не может справиться с такой легкой залдачей.
29 авг 2017 в 11:57
1 ответ
Правильный вызова обработки текста удалением пробелов в примере.
SET str=" 0122017"
set str=%str: =%
echo %str% ответ дан 31 авг 2017 в 16:11
9 серебряных знаков
15 бронзовых знаков
Пишите нам!
Архитектурная мастерская.
Продвижение сайтов от optimism.ru
Page generation time: 0.0761s (PHP: 58% – SQL: 42%) – SQL queries: 44 – GZIP disabled – Debug off
- You’re not going to get prompted for UAC authorization, even if logged in as the administrator and
- RUNAS expects that you have the administrator password, even if your user is setup as a local administrator, in which case the former password is not a sound security practice, specially in work environments.
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' ( echo Requesting Admin access... goto goUAC ) else goto goADMIN
:goUAC echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" set params = %*:"="" echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" exit /B
:goADMIN pushd "%CD%" CD /D "%~dp0"
rem --- FROM HERE PASTE YOUR ADMIN-ENABLED BATCH SCRIPT ---
echo Stopping some Microsoft Service...
net stop sqlserveragent
rem --- END OF BATCH ---- This solution works 100% under Windows 7, 8.1 and 10 setups with UAC enabled.
Всем привет
Есть bat скрипт на автоматическое подключение к впн/команду route add/подключение дисков с серверной.
Всё бы ничего, да только команда route add должна выполняться через cmd с правами администратора.
Вопрос, как можно выполнить bat скрипт, чтобы он открылся не в обычной cmd, а с правами администратора ?
1 золотой знак
25 серебряных знаков
33 бронзовых знака
задан 25 фев в 13:11
Это делается с помощью runas.
runas /user:Administrator "cmd /k {fullpath}\file.bat" ответ дан 25 фев в 15:00
1 золотой знак
25 серебряных знаков
33 бронзовых знака
У меня получилось только создав ярлык к этому батнику.
ответ дан 28 фев в 4:50

Герман Борисов
14 серебряных знаков
37 бронзовых знаков
9 gold badges
46 silver badges
61 bronze badges
asked Jul 17, 2012 at 14:44
This script does the trick! Just paste it into the top of your bat file. If you want to review the output of your script, add a “pause” command at the bottom of your batch file.
This script is now slightly edited to support command line args.
@echo off
:: BatchGotAdmin
::-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' ( echo Requesting administrative privileges... goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" set params = %*:"=" echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" exit /B
:gotAdmin pushd "%CD%" CD /D "%~dp0"
::--------------------------------------
::ENTER YOUR CODE BELOW:

18 silver badges
28 bronze badges
answered Mar 13, 2015 at 7:19

Lokesh Kumar
2 gold badges
8 silver badges
13 bronze badges
In the first use
runas /noprofile /user:mymachine\administrator yourbatchfile.bat Upon further reading, you must be able to type in the password at the prompt. You cannot pipe the password as this feature was locked down for security reasons.
You may have more luck with psexec
.
answered Jul 17, 2012 at 14:47
Bali C
35 gold badges
123 silver badges
152 bronze badges
Press Ctrl
+ Shift
and double-click a shortcut to run as an elevated process.
Works from the start menu as well.

25 gold badges
132 silver badges
188 bronze badges
answered May 18, 2015 at 8:13
1 silver badge
1 bronze badge
You need to enclose your code within this wrapper:
if _%1_==_payload_ goto :payload
:getadmin echo %~nx0: elevating self set vbs=%temp%\getadmin.vbs echo Set UAC = CreateObject^("Shell.Application"^) >> "%vbs%" echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs"
goto :eof
:payload echo %~nx0: running payload with parameters: echo %* echo --------------------------------------------------- cd /d %2 shift shift rem put your code here rem e.g.: perl myscript.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
goto :eof word
payload
, to indicate this is payload call, i.e. already elevated. Otherwise
it would just open new processes over and over.directory path where the main script was called. В связи с тем, что Windows всегда
запускает cmd.exe с повышенными правами в «%windir%\system32», нет простого способа узнать, что
исходный путь был ( и
сохраняя возможность копировать ваш сценарий без
трогательный код)
Примечание:
К сожалению, по какой-то причине shift
не работает для %*
, так что если вам нужно
чтобы передать фактические аргументы, вам придется прибегнуть к уродливой нотации, которую я использовал
в примере ( %1 %2 %3 %4 %5 %6 %7 %8 %9
), что также приводит к пределу
максимум 9 аргументов
ответил 22 авг 2012 в 12:08
Алоис Махдал
7 золотых значков
51 серебряный значок
69 бронзовых знаков
Чтобы предотвратить сбой сценария, когда файл сценария находится на несистемном диске (c:) и в каталоге с пробелами.
@echo off
if _%1_==_payload_ goto :payload
:getadmin echo %~nx0: elevating self set vbs=%temp%\getadmin.vbs echo Set UAC = CreateObject^("Shell.Application"^) >> "%vbs%" echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs"
goto :eof
:payload
::ENTER YOUR CODE BELOW::
::END OF YOUR CODE::
echo.
echo...Script Complete....
echo.
pause ответил 6 окт 2017 в 18:47
13 серебряных значков
14 бронзовых знаков
Затем просто скройте пакетный файл и запустите ярлык.
Таким образом, вы даже можете установить собственную иконку для ярлыка.
ответил 5 июля 2013 в 22:38
5 серебряных значков
10 бронзовых знаков
Это работает для меня в Windows 7–10 с параметрами, при запуске приложения или файла из любого места (включая браузер), а также при доступе к файлу из любого места. Замените ( ВАШ ПАКЕТНЫЙ СЦЕНАРИЙ ЗДЕСЬ
якорь) с вашим кодом. Это решение может помочь 🙂
@echo off
call :isAdmin
if %errorlevel% == 0 ( goto :run
) else ( echo Requesting administrative privileges... goto :UACPrompt
)
exit /b
:isAdmin fsutil dirty query %systemdrive% >nul
exit /b
:run <YOUR BATCH SCRIPT HERE>
exit /b
:UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs"
exit /B

1 золотой значок
16 серебряных значков
28 бронзовых знаков
ответил 12 декабря 2015 в 0:20

Примерно так:
if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else ( echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
) ответил 23 мая 2014 в 9:34
1 серебряный значок
2 бронзовых знака
ответил 20 декабря 2015 в 9:10
2 золотых значка
2 серебряных значка
12 бронзовых знаков
@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %~dp0'"
exit ответил 23 июл в 19:49

Вот более простая версия того же файла.
@echo off
break off
title C:\Windows\system32\cmd.exe
cls
:cmd
set /p cmd=C:\Enter Command:
%cmd%
echo.
goto cmd

25 золотых значков
132 серебряных значка
188 бронзовых знаков
ответил 21 августа 2017 в 7:42
Напишите текст с помощью блокнота или любого текстового редактора по вашему выбору. Откройте блокнот, напишите эту короткую команду «cmd.exe» без кавычек и сохраните ее как cmd.bat.
ответил 24 июля 2016 в 17:28



