2013-09-17 4 views
0

У меня есть этот код в файле пакетный (gitcopyfiles.bat), который отслеживает модифицированную файлы мерзавца и копирует их в указанную папку, но она не работает:Win7 Batch команда не работает

for /f "usebackq tokens=*" %A in (`git diff-tree -r --no-commit-id --name-only 
--diff-filter=ACMRT HEAD~1 HEAD`) do echo FA|xcopy "%~fA" "C:\git_changed_files\%A" 

Но это Безразлично 't work однако, когда я запускаю указанную команду непосредственно из командной строки, она работает хорошо. Таким образом, это не работает только в пакетном файле.

Может ли кто-нибудь помочь, что может быть неправильным? Я даже попытался запустить битой файл как администратор, но до сих пор не повезло

сообщение об ошибке, которое приходит на летучую мышь файла:

~fA" "C:\git_changed_files\A" was unexpected at this time. 

D:\wamp\www\myproject>for /f "usebackq tokens=*" ~fA" "C:\git_changed_files\A" 
+1

Я предполагаю, что вы имели в виду, что ** ** делает работу в командной строке - основная причина, я вижу использование '% A 'вместо' %% A' существует несколько различий между CMD и выполнением командного файла кода – SmokeyPHP

+0

@SmokeyPHP: Пробовал сменить '% A' на' %% A', но все равно не работал. Может быть, с косой чертой? – Dev01

+0

Я никогда не запускал команду, которая использует такие флаги, как '--no-commit', но я знаю, что когда я использовал специальные символы в команде' in() ', такой как pipe (' | '), я должен был убежать так: '^ |' (например, 'in ('ipconfig^| find" address "')' – SmokeyPHP

ответ

1

Дайте этот пробег:

@echo off 
for /f "delims=" %%A in ('git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT HEAD~1 HEAD') do xcopy "%%A" "C:\git_changed_files\" 
+0

Работает как шарм, спасибо вам большое :) – Dev01

1
do echo FA|xcopy "%~fA" "C:\git_changed_files\%A" 
  1. echo FA| не требуется, удалите его
  2. "%~fA" мощь не работает, если путь к файлу не установлен
  3. \%A" не требуется, удалите его
  4. for /f "usebackq tokens=*" должен быть for /f "usebackq delims="
+0

Спасибо за ответ, но все еще там: теперь у меня есть изменено как вы сказали: 'for/f 'usebackq delims ="% A in ('git diff-tree -r -no-commit-id -name-only -diff-filter = ACMRT HEAD ~ 1 HEAD') do xcopy "C: \ git_changed_files", но в то же время он дает ошибку '\ git_changed_files '. D: \ wamp \ www \ givingcircle> for/f" usebackq delims = "\ git_cha nged_files "' – Dev01

+0

Примечание: это должно быть '%% A', когда в командном файле'% A' в командной строке – SmokeyPHP

+0

+1 для полезных подсказок спасибо – Dev01

Смежные вопросы